次のようにコマンドライン引数を参照できます
string[] args = System.Environment.GetCommandLineArgs();
int i = 0;
foreach (string arg in args)
{
System.IO.File.AppendAllText(ログファイルパス, ++i + @") " + arg + System.Environment.NewLine);
}
↓
1) ドライブ:ディレクトリ\ファイル名
次のようにコマンドライン引数を参照できます
string[] args = System.Environment.GetCommandLineArgs();
int i = 0;
foreach (string arg in args)
{
System.IO.File.AppendAllText(ログファイルパス, ++i + @") " + arg + System.Environment.NewLine);
}
↓
1) ドライブ:ディレクトリ\ファイル名
レジストリエディタ (regedit) の検索機能を使うか、すべてのレジストリを *.reg 形式で書き出したものを type *.reg|find /i”検索値”>ログ.txt とします
.NET SDK をダウンロードします
.NET | C# |
---|---|
.NET 10 | C# 14 |
.NET 9 | C# 13 |
.NET 8 | C# 12 |
.NET 7 | C# 11 |
C# の歴史 C# の新機能の各バージョンに .NET と C# バージョンの組み合わせが書かれています
既にはいっているバージョンを確認します
dotnet --list-runtimes
『プログラムの追加と削除』から『.net』で検索してアンインストールできます
ダウンロードした『dotnet-sdk-***.exe』を実行します
インストール済みのテンプレートを確認します
dotnet new list
コンソールのテンプレートを作成します
cd /d "テンプレートを作成するフォルダの場所"
dotnet new console -o 新しいアプリ名
cd /d "テンプレートを作成するフォルダの場所\新しいアプリ名"
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true -p:PublishReadyToRun=true
コンパイルした *.exe ファイルは次の場所に作成されます
テンプレートを作成するフォルダの場所\新しいアプリ名\bin\Release\netバージョン\win-x64\publish
画面がある Win Forms アプリをつくる方法はこのようになります exeファイルの場所はコンソールアプリと同じです
cd /d "テンプレートを作成するフォルダの場所"
dotnet new winforms -o 新しいアプリ名
cd 新しいアプリ名
dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:PublishReadyToRun=true
アプリにアイコンを追加するには、アイコンファイル (*.ico) を用意します
「アプリケーション名.csproj」ファイルをメモ帳で開きます
「<PropertyGroup>」から「</PropertyGroup>」のあいだに次の行を挿入します
<ApplicationIcon>アイコンファイル名</ApplicationIcon>
exeファイルに詳細情報を埋め込むには、「テンプレートを作成するフォルダの場所\新しいアプリ名\obj\Release\netバージョン\win-x64」フォルダにある「アプリケーション名.AssemblyInfo.cs」ファイルをメモ帳で開きます
著作権
(挿入)[assembly: System.Reflection.AssemblyCopyrightAttribute(著作権表示)")]
製品名
[assembly: System.Reflection.AssemblyProductAttribute("製品名")]
説明・ファイルの説明
[assembly: System.Reflection.AssemblyTitleAttribute("説明")]
製品バージョン
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.2.3")]
ファイルバージョン
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.2.3.4")]
.NET 9 では、画面のハードコピーを取得するときは拡大率を考えずに普通にできます .NET 4 のときは面倒でした
作業証跡として画面ハードコピーした画像ファイルなど、似たようなファイルか大量にあるときはファイル名がまとめて一括で作成日に変更できたらいいなとおもうことがあります
そんな要望があったため「ファイル名を作成日にする.exe」をつくってしまいました
=ROUNDUP(数値,桁数)
「数値」:切り上げしたい数値または、セルの位置を指定します。
「桁数」:切り上げしたい桁数を指定します。
=ROUNDDOWN(数値,桁数)
=TRUNK(数値,桁数)
「数値」:切り捨てしたい数値またはセルの位置を指定します。
「桁数」:切り捨てしたい桁数を指定します。※桁数のあつかいに関しては、ROUND 関数と同様です。
=INT(数値)
=TRUNK(数値)
小数点以下の数値を切り捨てて整数にするときに使う関数です。
=ROUND(数値,桁数)
「数値」:四捨五入したい数値または、セルの位置を指定します。
「桁数」:四捨五入したい桁数を整数で指定します。指定した桁数のひとつ下の桁が四捨五入されます。
整数 = 整数 / 整数;
整数(intやlong)同士の割り算(/)の結果は整数になります
整数 = Fix(数値)
絶対値が小さい方向に丸めます
(例)98 = Fix(98.7)
(例)-98 = Fix(-98.7)
整数 = Int(数値)
値が小さいほうに丸めます
(例)98 = Fix(98.7)
(例)-99 = Fix(-98.7)
数値 = 整数 ¥ 整数
¥(エンマーク)での割り算は、割り算をする前に値を整数にします
3÷3.3は、3÷3としてから割り算されます
整数 = @Integer(数値)
今動いているプログラムファイルのパス(ディレクトリとファイル)を取得してみましょう。現在のプログラムファイルであって、カレントディレクトリとは異なります
いくつかの方法があります。プログラムを使用する環境で正しい値が返ってくることを確認しましょう
// .NET5 以降のばあい(ディレクトリのみ)
using System;
string ディレクトリ = System.AppContext.BaseDirectory;
カミュプリィがつくった次のプログラム↓は、↑この方法を使っています
// プロセスを使う方法
using System.Diagnostics;
string パス = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
// フォームを使う方法(コンソールアプリ可)
using System.Windows.Forms;
パス = Application.ExecutablePath;
// コマンドラインを使う方法
// デバッグでは *.dll になり、単一ファイルにまとめると *.exe になる
using System;
using System.IO;
c.IO.FileInfo ファイル = new System.IO.FileInfo(System.Environment.CommandLine.Replace("\"", "")); // パラメータがないと仮定
string パス = System.IO.Path.Combine(ファイル.DirectoryName, ファイル.Name);
// 与えられた情報を使う方法
// デバッグでは *.dll になり、単一ファイルにまとめるとブランクになる
using System.Reflection;
パス = System.Reflection.Assembly.GetExecutingAssembly().Location;
CGIとCronで共通のパスを取得できませんでした。詳しくは次の記事にまとめてあります↓
ノーツドミノではデータベースにプログラムが含まれますので、データベースのパスを取得します
データベースのファイル名に日本語を使うと、環境によって問題が起こることがあります。また&記号を使うと、検索で問題が起こることがありますので注意しましょう
Lotus Script には普遍的な方法と、ユーザーインターフェース(UI)から取得する方法のふたつがあります。ここでは便宜的に、普遍的な方法をバックエンドといい、ユーザーインターフェースをフロントエンドといいます
↓次はバックエンドの方法です。フロントエンドでも動きます
Dim セッション As New NotesSession()
パス = セッション.CurrentDatabase.FilePath
↓こちらはユーザーインターフェース(UI)から取得する方法です
Dim ユーザーインターフェース As New NotesUIWorkspace()
パス = ユーザーインターフェース.CurrentDatabase.FilePath
式言語では、Lotus Script でいうフロントエンドしかありません
パス = @Subset(@DbName; -1);
@DbNameは{サーバー; パス}を複数値で戻します。ここから最後のひとつの値を得るために@Subset(; -1)を使います
ほとんどの命令はコードを実行しているコンピュータの日時を返します
import java.util.Calendar;
Calendar 日時値 = Calendar.getInstance();
日時 = New Date();
Dim 日時値 As Variant
日時値 = Now
コードを実行しているコンピュータの日時の他に、サーバーの日時を取得する方法が用意されています
日時値 = @Now
Rem {実行環境の日時を取得}
サーバーの日時値 = @Now([SERVERTIME]:[LOCALTIMEONERROR])
Rem {サーバーの日時を得られないときはクライアントの日時を取得}
#include <chrono>
time_t 経過秒 = time(nullptr);
くわしくはこちらの記事に記載しています↓
値の型名を調べます
string 型名 = 値.GetType().FullName;
型名 = Microsoft.VisualBasic.TypeName(値) // 戻り値はString
型名 = Typename(値) // 戻り値はString
値が範囲内に収まるか否かを確認します
↓戻り値がTrueなら範囲に収まる、Falseなら収まらないとしています。型はintやdoubleなどにします
bool 関数名(型 下限, 型 上限, 型 値)
{
if (下限 > 上限)
{
型 一時的 = 下限;
下限 = 上限;
上限 = 一時的;
}
if (下限 > 値)
{
return false;
}
if (上限 < 値)
{
return false;
}
return true;
}
↓戻り値がTrueなら範囲に収まる、Falseなら収まらないとしています。型はLongやDoubleなどにします
Function 関数名 (下限 As 型, 上限 As 型, 値 As 型) As Boolean
関数名 = False
If 値 > 上限 Then
Exit Function
Elseif 値 < 下限 Then
Exit Function
End If
関数名 = True
End Function
また Select を使って書くこともできます↓
Function 関数名 (下限 As 型, 上限 As 型, 値 As 型) As Boolean
関数名 = False
Select Case 値
Case Is > 上限
Exit Function
Case Is < 下限
Exit Function
End Select
関数名 = True
End Function
Spring Bootのサンプルプログラムをつくってビルドしてみました
OSはWindowsを使いました
内容は Spring クイックスタートガイド に沿っています
Javaが使えるようになっていることが必要です。JDKのセットアップの詳細はこちら↓に記載しています
JDK (Java Development Kit) - [Windows]初めてApache Tomcatをセットアップ
Maven, Tomcat, Spring Boot はインストール不要です
まずは Spring Initializr のサイト↓を開きます
Spring Initializr
次のような感じで設定します。
Spring Boot のバージョンは、特に制約が無ければ括弧がないものの中で大きな数値を選びます。Packaging はウェブ用の『War』を選びます。Java のバージョンはお使いの環境にあわせます
右側のDependencies で『Spring Web』を追加します
設定が終わったら『GENERATE』ボタンを押します。ダウンロードが始まります
ダウンロードしたひな形を展開します
これからは、先の『Package name』に設定した値を『パッケージ名』、『Name』に設定した値を『ネーム名』と表記します
展開したフォルダの中にある src\main\java\パッケージ名\ネーム名Application.java をメモ帳で開きます
元はこんな感じです↓
package パッケージ名;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
追記したものはこんな感じになります↓ 太字の行を追加します
package パッケージ名;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}
ファイルを保存して閉じます
次の手順でビルドと動作確認ができます
Windowsコマンドプロンプトを終わるときはキーボードから「Ctrl + C」キーを押します
Windowsバッチをつくるとこうなります
cd /d "%~dp0"
call mvnw clean package spring-boot:run
EclipseやVisual Studio Codeを使うばあいは不要です
Spring Initializrを使っても良いかもしれません
次のページの『手動インストール』部分にある圧縮ファイル(例えば spring-boot-cli-3.3.5-bin.zip)をダウンロードします
Spring Boot のインストール - Spring
任意のフォルダに保存します。
[スタート]から[環境変数]を検索して、[システム環境変数の編集]を開きます。[システムのプロパティ]-[詳細設定]タブが開きますので、右下の[環境変数]ボタンを押します。
[Path]にSpring Boot CLIフォルダの中の[bin]を追加します。例えば D:\webservice\spring_CLI\bin になります
Java Servletの開発環境をつくったあと、テストするためにつくったJavaファイルとコンパイルバッチを無料ダウンロードできます
%CATALINA_HOME%\webapps\hello\WEB-INF
web.xml
src\HelloWorld.java
classes\HelloWorld.class (コンパイル結果)
『コンパイル(管理者として実行).bat』はどこにあっても構いません
Tomcatのサービス名は『Tomcat10』としています
『HelloWorld.java』内の{ユーザー名、パスワード}は実行環境にあわせて変更してください
[Windows]初めてApache Tomcatをセットアップ
ダウンロードできる『HelloWorld.java』はTomcatおよびMariaDBを使ったServletの開発環境が正しく構築できているか確認するためにつくりました
HelloWorld.javaは次の順番で動作し、ログをHTMLで表示します
site:ドメイン
どこかの国のサイトから検索したいときは、その国のドメインのサイトから検索します。例えば次のようになります
検索語 site:.uk
日本の政府関係のサイトから検索したいときは次のようになります
検索語 site:.go.jp
ウェブやモバイルのエクセルでは CELL関数 がサポートされていないそうです
Excelのワークシート名をセルに表示するためにCELL関数を使います。CELL関数の戻り値にはファイルパスとワークシート名を含むため、ワークシート名を抽出する必要があります
=CELL("filename")
または
=CELL("filename",A1)
↓
"https://・・・/一部のフォルダ名/[ファイル名.xls]シート名"
上の式にある『A1』は範囲を表します。現在のワークシートのA1セルという意味です。A2でもB1でもOKです。現在のワークシートのどこかを指していれば何でもOKです
範囲を省略することもできますが、別のワークシートで同じ式が使われると、こちらの計算結果も別のワークシートのものと同じになるそうです。きっとキャッシュが絡んだ問題なのでしょう
現在の Excel ファイルの名前、パス名、またはワークシート名をセルに挿入する - Microsoft
CELL(“filename”)の戻り値に含まれる最後の角括弧(])より右側がワークシート名になります
簡易に最初の角括弧より右側をとる式はこちら
=LET(FN,CELL("FILENAME",A1),MID(FN,FIND("]",FN)+1,LEN(FN)))
きちんと最後の角括弧より右側をとる式はこちら
=LET(FN,CELL("FILENAME",A1),IF(ISERROR(FIND("]",FN)),"",MID(FN,FIND(決して使われない記号,SUBSTITUTE(FN,"]",決して使われない記号,LEN(FN)-LEN(SUBSTITUTE(FN,"]",""))))+1,LEN(FN))))
※注:「決して使われない記号」はパスやワークシート名に含まれない1文字
きちんと最後の角括弧より右側をとる式はとても長いです。何をしているか説明します
こういった関数型の言語は「ローコード」とか言われて簡単に使えそうな雰囲気を醸し出すのに成功しています。でもこのように長いコードになると「読めない・理解できない」です。
片仮名で「メーベン」とするのが日本語っぽいでしょうか。色々なライブラリを使ったJavaのプログラムをビルドするためにあるそうです
こちら(Apache Maven のダウンロード – Apache Maven Project)から圧縮ファイルをダウンロードできます。
解凍したら任意のフォルダに保存します
次にWindowsのシステム環境変数を設定します。
[スタート]から[環境変数]を検索して、[システム環境変数の編集]を開きます。[システムのプロパティ]-[詳細設定]タブが開きますので、右下の[環境変数]ボタンを押します。
[Path]にMavenのフォルダの中の[bin]を追加します。例えば D:\webservice\maven\bin になります。
確認のために、次のようにMavenのバージョンを表示してみましょう
mvn -v
Mavenによって自動ダウンロードされるファイルが保存されるフォルダを作成します。次にsettings.xmlを更新します
<localRepository>D:\webservice\maven\repository</localRepository>
これで設定は終わりです
Mavenには次のようなSpring Bootのアーキタイプがありますが、10年も更新されず放置されているようです
3213: remote -> org.springframework.boot:spring-boot-sample-tomcat-archetype (Spring Boot Tomcat Sample)
Spring Initializrで『Project』を『Maven』にして、ひな形をつくると良いでしょう
流れは次のようになります
コマンドは次のようなものです↓
cd /d "プロジェクトをつくるフォルダ"
mvn -B archetype:generate "-DgroupId=グループ名" "-DartifactId=プロジェクト名"
次のようにフォルダとファイルがつくられます↓
プロジェクトをつくるフォルダ
プロジェクト名フォルダ
srcフォルダ
mainフォルダ
javaフォルダ
グループ名フォルダ
App.javaファイル
testフォルダ
javaフォルダ
グループ名フォルダ
AppTest.javaファイル
pom.xmlファイル
App.javaはこんな感じです↓ コメントを取り除いています
package グループ名;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
AppTest.javaはこんな感じです↓ コメントを取り除いています
package グループ名;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class AppTest
extends TestCase
{
public AppTest( String testName )
{
super( testName );
}
public static Test suite()
{
return new TestSuite( AppTest.class );
}
public void testApp()
{
assertTrue( true );
}
}
pom.xmlはこんな感じです↓
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>グループ名</groupId>
<artifactId>プロジェクト名</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>プロジェクト名</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
できたサンプルをビルドするには、プロジェクト作成時につくられたpom.xmlファイルがあるフォルダへ移動してから次のようにコマンドを入力します
cd /d "プロジェクトをつくるフォルダ\プロジェクト名"
mvn compile
プロジェクトを削除するには、プロジェクト作成時につくられたpom.xmlファイルがあるフォルダへ移動してから次のようにコマンドを入力します
cd /d "プロジェクトをつくるフォルダ\プロジェクト名"
mvn clear
業務をひとからひとへ継承するときどうしていますか?
業務の手順を普段から作成している場合だけでなく、引き継ぎが必要になってから文章を書くこともあるとおもいます。
それらの文章はすべての担当者が共有する標準的な手順として扱われていますか?
表計算やワープロなど数多くのファイルをファイルサーバーやシェアポイントなどへ保存していませんか?
会社の資産として整理整頓できていますか?
それぞれの担当者がおこなう雑多な業務のやり方を常日頃から入力・更新しておくアプリがありました。
創造的な業務はざっくりした手順で、機械的に進める業務は細かい手順を入力します。
このアプリには会社全体でおこなっている業務の手順が集められて、これを参考に管理・合理化を進める部署では業務の合理化・標準化を進めます。
直接ノーツドミノへ入力することでファイルが散らかることがありません。ファイルをひとつひとつ開いて中身を確認するような手間はありません。文章は素早く検索できます。
将来、事業承継をすることになったときでも、会社の業務すべての手順があれば、引き継いだひとも安心です。
文章を管理するデータベースソフトウエアであり、業務アプリを素早く開発する基盤でもある『ノーツドミノ』を使うと、このアプリをノーコード(プログラム開発不要・エンジニア不要)で開発できます。
ICTエンジニア不要でDXを推進する方法をお伝えします。強力な開発プラットフォームがICTエンジニアなしでDXを推進できるようにします。
個々のデータを入力・表示する画面は文章を編集する方法の延長です。データ一覧を表示する画面は個人ビューやフォルダをつくる方法と同じです。
このようにユーザーが使うことの延長線上にデザイン(設計)することがあるのがノーツの特徴になります。ノーツドミノを使っていれば自然にデザインに入っていけます。
データ入力・表示するデザインは、ノーツドミノで表を含む文章を入力したことがあればスムースに作成できます。ノーツドミノに文章を作成する要領で作成し、追加でデータを入力するフィールドを配置することでデザインが完成します。ユーザーの文章作成画面とデザイン画面の使い勝手が同じなので、業務を一番知っているユーザーが自信を持ってDXを主導することができます。
データを一覧表示するデザインは、個人ビューや個人フォルダーと同じものです。ノーコードから作成できます。
このようにユーザーがデザインできるのがノーツドミノの利点です。しかしながらパフォーマンスを考慮に入れたデザインが必要になったら、総合的な知識があるノーツドミノのICTエンジニアにお任せください。
一定のルールにのっとったUI(ユーザーインターフェース)で、どのアプリも作られています。ひとつのアプリを使えるようになれば、他の何百というアプリも抵抗なく使えます。業務で使うアプリは操作方法の文書を読まなくても使えると嬉しいです。恰好がパッとしなくてもよいのです。無駄なく確実に使えるアプリであることが一番です。
アプリはテンプレート(ひな形)から設定を変更するノーコードでつくることができます。小さいプログラムを入れたローコードや、ICTエンジニアに依頼してプロコードで新しいテンプレートをつくることもできます。テンプレートができあがれば、同様のアプリをいくつでもつくることができます。
DXを推進するためにユーザーが自分でアプリをつくっていくことができます。ユーザーがDXを推進できるというのがノーツの特徴ですが、ノーコードでつくられたアプリができることは限られます。
ユーザーによってアプリがたくさんつくられますが、管理用ソフトウエアで制御することができます。ユーザーがICT部門に権限を与えてくれなくても、ICT部門は権限を取得できます。そっと見守るように管理することもできます。
セキュリティ設定を制御することでICT部門が独占的にアプリを開発・リリースできるようにすることができます。一般的にアプリが高度化・複雑化します。
個々のユーザーが求める情報を優先的に表示するようにするためにはICTエンジニアの技術力と経験が必要になります。ひとによって見えるものが違うというのは完成イメージを想像するのが難しいです。思いやりも必要ですね。
アプリ間やシステム間の連携をするようになるとノーツドミノってイイよねってなります。
私が作成したもの、私のチームが作成したもの、とにかく私に関係あるもの、これらの情報が真っ先に見える情報システムって素敵ですよね。必要な情報を探さない、そこにある、私は大好きです。
個人ビューは誰でもノーコードから作成できます。アクセスする権限さえあれば、私が求める形式で、私が見やすい並び順で、私が見たいものだけをノーコードやローコードでいつでも表示できます。情報エンジニアにしか扱えないプロコードは必要ありません。
『購読』という機能を使えば、私がウォッチする範囲のデータが投稿または更新があると通知してくれます。これはノーツクライアントから誰もが使えるプロコード不要の機能です。
ノーツ/ドミノ(Notes/ Domino)で使われるおもな言語にはロータススクリプト(Lotus Script)とロータス式言語(Lotus 式言語やアットマーク関数と呼ばれます)があります。サーバーサイドではJavaも使えます。ロータススクリプトもロータス式言語もコードを保存するときに自動でコンパイルされますので、普段はコンパイルを意識することはありません。
ロータススクリプトは VBScript に似たところがある言語ですが、後発だけあってエラー処理や変数の型などはかなり改善されて使いやすくなっています。Visual Basic にそっくりです。
ノーツ/ドミノをウェブ関係で使うと、JavaScriptやJavaを使います。表示まわりではHTML/CSSも使うでしょう。
Windows上でドミノサーバーを動かしていると、管理用のプログラムを C# や VBScript で書くことがあります。C#コンパイラ(csc.exe)は.NETの実行環境に含まれています。VBScriptはWindows標準コマンドWScriptやCScriptからソースコードをコンパイルせずにコマンドプロンプトやマウスダブルクリックで実行することができます。
プログラムをつくりませんか?コンピューターの記録やファイルやデータを整理するときに、ちょちょいとプログラムをつくってはお仕事を片付けるのに役立ちます。
プログラムをつくる能力を身につけるために、具体的にはどんな行動があるでしょうか?…何からはじめたらいいでしょうか?
プログラムをつくれなくて困っているひとをみかけます。いったい何が最初のプログラムをつくる障害になっているのでしようか。一緒に考えてみましょう。
プログラムを作れるようになるために、私がおすすめする最初の行動は『プログラムという言葉の意味を調べる』ことです。
孫子さんがむかし『敵を知り己を知れば百戦あやうからず』と書いています。教科書に長年掲載されているとおもいますので、孫子さんを知っているひとは多いのではないかとおもいます。孫子さんも言っているし…ということで、プログラムという言葉の使用例をネットで検索し、プログラムという言葉の意味を国語辞典や英和辞典などの辞書で調べましょう。
フィギュアスケートのプログラム、運動会のプログラム、海外留学のプログラム、ポイントやマイレージのプログラム、プログラム細胞死、観光立国実現に向けたアクション・プログラム、…コンピューター関連ではない用例がたくさんありますね。
番組、予定、計画をたてること、目録、演目、手順を指示したもの、前もって書いたもの、…
いろいろな意味がでてきました。
プログラムとは『方法や順番を考えることやその結果できあがったもの』と定義しましょう。何かの記録であって、次の行動に役立てるつもりがないものは、手順を記載してあってもプログラムではないでしょう。
生活の場でさがしてみると、目的地へ約束の時間に到着するように電車の時間を調べることはプログラムでしょう。持ち物のリストをつくることもプログラムですね。
料理のレシピもプログラムですが、レシピを読みながら料理をつくることはプログラムを利用しているだけでプログラムではありません。レシピなしにその場で考えながら料理をつくることはプログラムでいいでしょう。
プログラムを『方法や順番を考えることやその結果できあがったもの』と定義したので、ぢゃあトレーニング…といきたいのですが、そのまえに基礎能力や心身の状態について考えていきましょう。これはとても大切なことで、きちんとやらないと苦労するとおもいます。
睡眠を十分にとることは最も大切です。私の経験では、睡眠不足のときに書いたプログラムは翌日修正するよりも、破棄して書き直したほうが時間の節約になるくらいです。睡眠は頭脳労働の質に大きな影響を与えます。
睡眠中には記憶の整理がおこなわれるそうなので、効果的に学ぶために十分な睡眠をとりましょう。
夜の部屋は薄暗い電球色にしたり、パソコンやスマートフォンを使わないようにしたり、眠れないだろうなぁとおもっても毎日同じ時刻に寝る時間を確保しましょう。睡眠に割く時間は今までよりも多めにしましょう。1週間くらい同じような生活をしていると頭がさえてくるとおもいます。
プログラムをつくることは頭脳労働であると考えます。頭を働かせるための習慣をおこなうことが有効です。お茶やコーヒーなどからカフェインを接種することは有効です。また通勤や昼休みに身体を動かすことも有効です。
勤務の前に軽い運動を強制するという観点では、公共交通機関を使って通勤することは理にかなっていると感じます。
この文章は日本語で書いています。ブラウザーの機械翻訳をとおして日本語ではない言語で読むひとがいるかもしれませんが、日本語で読まれることが圧倒的に多いでしょう。
誰かの知恵を教えてもらうには言葉を使うことが多いとおもいます。言葉を気にかけることはとても大切です。教えるひとは知恵を言葉に変換して伝えます。教わるひとは言葉を知恵に逆変換します。この2回の翻訳の出来によって伝わる知恵の質に影響を与えます。
教えるひと教わるひとの言葉のひとつひとつの意味が違っていたとしたら知恵が正しく伝わりません。日本語を英語に翻訳したものを日本語に再翻訳するとデタラメな文章になることがあります。これに近いことを日常的な言葉のやりとりでおこなっていたとしたら、知恵を教えてもらうのはとても難しいことです。
少しでも知恵を正しく受け取るには国語辞典が役に立ちます。よく理解できなかったことや、何で?と感じた言葉をひとつひとつ国語辞典で確認するとよいでしょう。言葉の知らなかった意味を発見することがあるかもしれません。
短期間でプログラムをつくれるようになろうとしていますので、あらたに使い方を覚えなければならない高機能なツールは最小限にしましょう。Windowsのメモ帳でプログラムをつくれるならそれでじゅうぶんです。高機能エディターや統合開発環境の使いかたを覚えるのは時間の無駄でしかありません。
ツールを選ぶことができるのなら心にとめておくとよいでしょう。
こっそりプログラムをつくるのでなければ、誰かに見せたり使わせたりするとおもいます。仕事でプログラムをつくるのなら、良い評価を得ることがある反面、安定動作しなければ批判を浴びることもあるでしょう。あなたが全力で創り上げたプログラムは多くのひとから評価・批判されることになります。
プログラムに限らず、仕事で創作をすると様々な評価を聞くことになります。評価されることを避けながら創作を続けるのは難しいとおもいます。評価・批判されることは、あなたの創作物に興味を持ったということです。前向きに考えて創作に生かしましょう。
目的を達成する方法はひとつとは限りません。『方法や順番を考えること』はプログラムそのものです。さあプログラムをつくるちからを伸ばすプログラムを一緒に考えましょう。
子ども向けの教育番組は考えるちからを伸ばすためにいろいろなことをやってくれます。おとながみても楽しい番組もあります。例えば次の番組は制作にちからがはいっていて、気づかせてくれるものがあるとおもいます。
ピタゴラスイッチ - 4~6歳児を対象にした「考え方」を育てる番組
子ども向けの教育番組で、映像をたくさん使って教えてくれます。おとながみても楽しいTV番組でしょう。
小さい子と一緒に積み木で遊びましょう…とは言いません。
コンピューターのプログラムは積み木と共通するところがあります。コンピューターの回路はごく単純な計算やデータのコピーといった基本的なことしかできません。それらを組み合わせることで複雑なことをやっています。
実際にプログラムをつくる場面でも、プログラム言語が用意した言葉を使って新しい言葉をつくります。基本的なものを組み合わせて新しいものをつくりあげるところは積み木と共通します。
いろいろなものを組み合わせる習慣をつけることはプログラムをつくるために役にたつとおもいます。
プログラムをつくることが上達への近道だとおもいますが、つくれないひとに向かって『まずはつくってみたら?』というのはおかしいです。まずはイメージトレーニングをしてみましょう。プログラムをつくっているイメージを膨らませることならできるかもしれませんね。
とても短いプログラムはお約束の部分を除くと1行から数行になることが多いとおもいます。ハローワールドとメッセージを出力するだけのプログラムを見かけることがあります。いつも同じように書くお約束の部分はコピペできるようにメモっておけばいいでしょう。
それではハローワールドとメッセージを出力する部分を詳しく見ましましょう。Lotus Scritでは『Print “ハローワールド”』、 Lotus 式言語では『@StatusBar (“ハローワールド”)』、 VBScriptでは『WScript.Echo “ハローワールド”』、 C#では『using System; Console.WriteLine(@”ハローワールド”);』、 C++では『#include <iostream>; using namespace std; cout << “ハローワールド” << endl;』
のようになります。
はい、見てわかるとおもいますが言語によってバラバラです。そこはよしとして、注目すべきなのは 命令を使うためのお約束、命令、ハローワールドを囲う記号、ハローワールド、行末のお約束 というようにプログラムは細かいものの組み合わせになっていると気づくことが大切です。細かいものを組み合わせて行をつくり、行を組み合わせてひとまとまりの章になります。その全体がアプリケーションという単体で動くプログラムになります。
最初からスラスラと作っていけるものではないので、一行つくるのに何時間もかかったり、ひとつの機能をつくるのに何日もかかったとなげく必要はありません。それが普通だとおもってください。
インターネット、本やYouTubeなどから知識を得ることができます。でも知識を得ることに熱中しないでください。方法や順番を考えるちからを伸ばすことがもっとも大切なことで、知識を得ることは目的から外れます。
考えてみてください、知識があればプログラムをつくれるようになるでしょうか?私はそのようにおもいません。
すでになんらかのプログラムをつくったことがあるひと、すでにプログラムをつくる能力が備わっているひとであれば、別の言語や環境でプログラムをつくるときに言語の特徴やエディターの使い方などの新しい知識を得る必要があるでしょう。こういうときでも言語ひとつひとつの関数を覚えることはしません。使う関数の詳細な仕様は繰り返し調べるようにしています。記憶ってあまり正確ではないと感じています。
ほかにはどんな方法があるでしょうか?
皆さんも考えてみてください…
わたしが教えてきた経験から言わせていただくと。。「プログラムをつくれるようになりたい」という強いおもいから、基本情報技術者試験のような検定試験の勉強をする方向へちからを集中してしまったひとは想いを遂げられない。。みたいです。
プログラムをつくれるようになるために繰り返し練習することが大切です。勉強はちょっと違うと感じています。
年齢に関しては『年齢のとなえ方に関する法律』『年齢計算ニ関スル法律』と『民法 第百四十三条』に記載があります。
生まれた日が0歳になりますので、次の誕生日は1歳になります。
そして生まれた時刻は関係ありません。日付がかわる深夜00:00から誕生日が始まります。
これらの法律の条文を読んでいる限りではわからなかったのですが、『年齢の計算に関する質問主意書 平成十四年七月二十五日』の1項には「法律上の満年齢計算では誕生日の前日に年齢を加算する」と記載があります。つまり4月1日生まれのひとは3月31日に年をとることになります。
これを踏まえて、年齢を求めるエクセルの計算式は次のようになりました。
=DATEDIF(誕生日-1,TODAY(),"Y")
または
=DATEDIF(DATE(誕生日の年,誕生日の月,誕生日の日)-1,TODAY(),"Y")
日時値の整数部分は日付を表し、小数部分は時刻を表します。例えば日時値から1を差し引くと前日になります。
javacでコンパイルするとき『-classpath “%CATALINA_HOME%\lib\servlet-api.jar”』を追加してみましょう。
なお『import javax.servlet』は『import jakarta.servlet』に変更になっています。
Windowsでbatファイルをつくるとき、最も気を付けなければならないのはファイル名でしょう。
ファイルの検索はカレントディレクトリが最優先されるため、命令を実行したつもりがバッチを実行してしまって???となることがあります。
MariaDBをインストールするとHeidiSQLが付いてきます。このHeidiSQLを開いて新しくデータベースを作成してみます
画面左側の [localhost] - [新規作成] - [データベース] を選びます
[データベースを作成] 画面で、任意の [名前] をいれます
[照合] は何を選んだらいいの?というのが今回のお話しの中心になります
データを比較するときにどうするかというものです
日本語対応のUTF-8にするのでutf8mb4にしますが、utf8mb4から始まるものがたくさんあります
細かいことは列の設定でもできるそうなので、データベースの設定としてはutf8mb4_binにします
binはバイナリ比較をするという意味で、アルファベットの大文字小文字や平仮名片仮名を別の文字として比較します
データベースを作成するときに名前と照合が必要でした
MariaDBはOS2/400と同様に、あらかじめ列を定義する必要がありそうです
Notes/Dominoはデータベースのパスとタイトルを決めればOKで、基本の NoteID と UniversalID のふたつのテーブルは一律に自動作成されました
こういうところがMariaDBとNotes/Dominoの違いなんだねと感じます
先程作成したデータベース名のところでマウス右ボタンクリックして、[新規作成] - [テーブル] を選びます
インターネットで見つけた『掲示板サーブレットを作成する』記事のデータベースならこんな感じになるのかなとサンプルを作ってみました
Windowsコマンドプロンプトを開いて新しくデータベースを作成してみます
例えば次のように操作できます
mariadb -u ユーザー名 -p
(パスワード入力)
create database `データベース名`;
show databases;
use `データベース名`;
create table `テーブル名` (`カラム名` 型 オプション,`カラム名` 型 オプション,・・・);
show tables;
select count(*) from `テーブル名`;
drop table `テーブル名`;
drop database `データベース名`;
exit;
MariaDB中のデータベース名やテーブル名などの前後は「`(バッククォート:Shift + @)」で囲みます。バッククォートを忘れると次のようなエラーが出ます
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*' at line *
名前によってはバッククォートを付けなくても大丈夫なこともあります。例えば先頭文字が英字でコマンドとは異なる文字列のばあいです
Javaでウェブサイトを作りたくて Windows クライアントに Apache Tomcat をセットアップしました。色々なサイトを参考にしましたので、わたしもまとめ情報を公開します。
でもね、開発するだけなら Tomcat も HTTP Server も不要でした。詳しくはこちら↓で紹介しています
Spring Initializrで始めるウェブ開発
ダウンロードしたファイルは次のものになります。今回はすべてZIPファイルをダウンロードしました。ダウンロード先のリンクを貼っておきます。
まずはJDKからセットアップします。
ダウンロードしたZIPファイル内の[jdk-23]フォルダを任意のローカルディスクに保存します。わたしはフォルダ名を[jdk]に変更しました。
次にWindowsのシステム環境変数を設定します。Tomcatでも設定しますので、あとでまとめて設定しても良いです。
[スタート]から[環境変数]を検索して、[システム環境変数の編集]を開きます。[システムのプロパティ]-[詳細設定]タブが開きますので、右下の[環境変数]ボタンを押します。
[JAVA_HOME]を追加して値をJDKのフォルダ名にします。例えば D:\webservice\jdk になります。
また[Path]にJDKのフォルダの中の[bin]を追加します。例えば D:\webservice\jdk\bin になります。
JDKに続いて Apache Tomcat をセットアップします。
ダウンロードしたZIPファイル内の [apache-tomcat-10.1.30] フォルダを任意のローカルディスクに保存します。わたしはフォルダ名を[tomcat]に変更しました。
次に設定ファイルを更新します。
Tomcatのフォルダにある conf\server.xml をメモ帳で開きます。
<Connector port=”8080″ から /> までをコメントアウトして無効にします。
<Connector protocol=”AJP/1.3″ から /> までをコメントアウトから外して有効にします。
<Connector protocol=”AJP/1.3″ から /> の間に secretRequired=”false” を追記します。
<Host から </Host> の間に <Valve className=”org.apache.catalina.valves.RemoteAddrValve” allow=”127.0.0.1″ /> を追記します。
ファイルを保存して閉じます。
(Windowsのみ)
Tomcatのフォルダにある conf\logging.properties をメモ帳で開きます。
java.util.logging.ConsoleHandler.encoding = UTF-8 行を java.util.logging.ConsoleHandler.encoding = SJIS に変更します。
次にWindowsのシステム環境変数を設定します。
[CATALINA_HOME]を追加して値をTomcatのフォルダ名にします。例えば D:\webservice\tomcat になります。
また[Path]にTomcatのフォルダの中の[bin]を追加します。例えば D:\webservice\tomcat\bin になります。
サービスとして起動するには、コマンドプロンプトを開いてトムキャットの bin ディレクトリへ移動して次のコマンドを実行します。
service.bat install
もし「[error] [ 3540] 指定されたサービスは既に開始されています。」と表示されたら、既にサービスに登録されていることを疑ってみます。サービス名はAから始まる「Apache Tomcat ・・・」です。
次にWindowsサービスの一覧を開いて「Apache Tomcat ・・・」を見つけます。
「スタートアップの種類」が手動になっていますので、自動へ変更します。
最後に Apache Http Server をセットアップします。
ZIPファイル内の [Apache24] フォルダを任意のローカルディスクに保存します。わたしはフォルダ名を[apache]に変更しました。
次に設定ファイルを更新します。
Apache HTTP Serverのフォルダにある conf\httpd.conf をメモ帳で開きます。
Define SRVROOT “パス” のパスを実際のパスに書き換えます。例えば D:/webservice/apache になります。
次の2行の先頭にある#を取り除いて有効にします。
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
次の2行を追記します。
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ファイルを保存して閉じます。
サービスとして起動するには、コマンドプロンプトを開いてアパッチの bin ディレクトリへ移動して次のコマンドを実行します。
httpd.exe -k install
MySQLを使おうかMariaDBにしようか、色々と悩みました。色々と調べてみるとMySQLとMariaDBには際立った違いはなく、こだわらない人には「どちらでもよい」と感じられる程度の差異があるとの認識に達しました。今回はMariaDBを使うことにします。
MSIファイルをダブルクリックしてセットアップを始めます。
パスワードやインストール先パスを入力し、「Use UTF8 as default server’s character set」のチェックを入れます。
これでMariaDBのセットアップが終わり、サービスとしてMariaDBが動作しています。
次にWindowsのシステム環境変数を設定します。[Path]にMariaDBのフォルダの中の[bin]を追加します。例えば D:\webservice\MariaDB\bin になります。
ダウンロードしたjarファイルを次の2つのフォルダに保存します。
Tomcatが開始されているときはファイル保存後に再起動します。
最初に Tomcat を開始します。
Tomcat のフォルダにある bin\startup.bat をダブルクリックで Tomcat を開始します。
[JAVA_HOME]に関するエラーが表示されたばあいは、環境設定のパスを再確認します。パスをコピペしてみると良いでしょう。
次に Apache Http Server を開始します。
Apache HTTP Serverのフォルダにある bin\httpd.exe をダブルクリックで Apache Http Server を開始します。
最初に開始するときは Windows によって PC が保護されます。
これを回避するために bin\httpd.exe ファイルのプロパティを開いて、[全般]タブの下側にある[許可する]にチェックを入れて[適用]します。これで bin\httpd.exe ファイルをダブルクリックで実行できるようになりました。
ブラウザーを開いて http://localhost を開きます。Apache Tomcat の画面が表示されれば成功です。
開いている httpd.exe の画面の右上にある X をクリックして閉じます。
次に Tomcat のフォルダにある bin\shutdown.bat をダブルクリックで Tomcat を終わらせます。
これでローカルPCにサーブレットとJSPの実行環境が整いました。
本番環境では https が使われますので、http から変更する設定が必要になります。でもドメインが必要になりますので、ローカル環境では難しいとおもいます。別の機会に紹介できればいいなとおもいます。
Tomcat/webapps のフォルダに アプリ名(コンテキストルート)/WEB-INF のサブフォルダを作ります。例えば tomcat\webapps\hello\WEB-INF という風です。
サンプルのサーブレットファイル(なんとか.class)は WEB-INF フォルダに classes サブフォルダを作って保存します。
Tomcat/conf/web.xml を WEB-INF フォルダにコピペして、メモ帳で開きます。次のブロックを探しましょう。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
・・・
<load-on-startup>1</load-on-startup>
</servlet>
↑これを、↓このように書き換えて保存します。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>アプリ名(コンテキストルート)</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Tomcatを再起動することで設定が読み込まれます。
ブラウザーを開いてURL「http://localhost/アプリ名(コンテキストルート)」を開きます。
無事に開きましたでしょうか?
稼働確認のためにつくったプログラムはこちらからダウンロードできます
[Java]Tomcat-MariaDBサンプルプログラム
lsコマンドでファイルの一覧を取得できますが、表計算ソフトに貼り付けられるようなテーブルではありません。使い勝手を良くするためにCSVまたはTSV形式のファイルに変換してみましょう。
lsコマンドの結果は次のような規則があります。
「/」で始まる行はディレクトリをあらわします。ここからディレクトリの情報が表示されるという意味です。
「-(ハイフン)」で始まる行はファイルです。
では、ノーツ(開発プラットホーム)のアクションボタンでCSVやTSVに変換するプログラムをコーディングしてみましょう。
※最初はC#で変換しようとしましたが、ノーツの手軽さに負けました。
次は、Windows OS のドキュメントフォルダの source.txt ファイルを読み込んで result.tsv を作成するプログラムになります。コーディングの手間を減らすためにファイル名を固定にしています。
Option Declare
Const SOURCE_FILE = {source.txt}
Const CHAR_SET = {UTF-8}
Const RESULT_FILE = {result.tsv}
Const PathPartition0 = {/} ' 初期値
Const PathPartition1 = {\} ' 選択値
Sub Click(Source As Button)
Dim RESULT_SEPARATOR As String
RESULT_SEPARATOR = Chr (9)
Dim sourcefolder As String
Dim pathpartition As String
Dim sourcefilepath, resultfilepath As String
Dim scriptshell As Variant
Dim sourcefile, resultfile As Integer
On Error Resume Next
Set scriptshell = CreateObject ({WScript.Shell})
sourcefolder = scriptshell.SpecialFolders ({MyDocuments})
On Error Goto 0
If 0 = Len (sourcefolder) Then
Print {MyDocuments フォルダが不明}
Exit Sub
End If
pathpartition = PathPartition0
If 0 < Instr (1, sourcefolder, PathPartition1) Then
pathpartition = PathPartition1
End If
sourcefilepath = sourcefolder + pathpartition + SOURCE_FILE
sourcefile = Freefile ()
Err = 0
On Error Resume Next
Open sourcefilepath For Input As sourcefile Charset = CHAR_SET
On Error Goto 0
If 0 < Err Then
Print {ファイルが見つかりません : } + sourcefilepath
Exit Sub
End If
resultfile = Freefile ()
resultfilepath = sourcefolder + pathpartition + RESULT_FILE
On Error Resume Next
Open resultfilepath For Output As resultfile
On Error Goto 0
If 0 < Err Then
Print {ファイルを作成できません : } + resultfilepath
Close sourcefile
Exit Sub
End If
Dim sourceline, currentdirectory As String
currentdirectory = {}
Do Until True = Eof (sourcefile)
Line Input #sourcefile, sourceline
Select Case Left (sourceline, 1)
Case {/}
Select Case Right (sourceline, 1)
Case {:}
currentdirectory = Left (sourceline, Len (sourceline) -1)
End Select
Case {-}
Dim columns (1) As String
Dim position, beforeposition, column As Long
columns (0) = currentdirectory
beforeposition = -1
column = 1
For position = 1 To Len (sourceline)
Select Case Mid (sourceline, position, 1)
Case { }
If (beforeposition + 1) <> position Then
column = column + 1
End If
beforeposition = position
Case Else
If (beforeposition + 1) = position Then
If 8 = column Then
columns (1) = Mid (sourceline, position)
Exit For
End If
End If
End Select
Next
Print #resultfile, Implode (columns, RESULT_SEPARATOR)
End Select
Loop
Close resultfile
Close sourcefile
End Sub
表計算ソフトを開いて、メニューの[開く]から result.tsv を選択して、区切文字をタブに指定して読み込めば完了です。
ls で / 以下すべてを取得しているとき、result.tsv の中身を表計算ソフトへコピペするとメモリ不足エラーが表示されることがあるため注意です。
カミュプリィの『西暦・年齢・和暦・干支対照表』CGIを書くときに気を付けたところは「コードのわかりやすさ」です。
CGIはHTMLの内容を出力するプログラムです。表示された『西暦・年齢・和暦・干支対照表』でマウス右ボタンをクリックして「ページのソースを表示」で表示されたものを出力する処理をおこなっています。
それならCGIが出力するHTMLの内容をそのままファイルに保存しておくのが、もっとも全体がわかりやすくなるとおもい、ざっくり次の内容でテキストファイルを保存しました。
<!doctype html>
<html dir="ltr" lang="ja" prefix="og: https://ogp.me/ns#" >
<head>
<meta charset="utf-8">
<title>西暦・年齢・和暦・干支対照表</title>
</head>
<body>
<table>
<caption>西暦・年齢・和暦・干支対照表</caption>
<thead>
<tr>
<th>西暦</th>
<th>年齢</th>
/* HEADER CREATE */
<th ID="ETO">干支</th>
</tr>
</thead>
<tbody>
/* TABLE CREATE */
</tbody>
</table>
<div class="indent">
</div>
</body>
<footer>
/* COPYRIGHT CREATE */
</footer>
</html>
『/* HEADER CREATE */』『/* TABLE CREATE */』『/* COPYRIGHT CREATE */』部分のHTMLが足りていませんので、干支や和暦の情報をもとにCGIが補います。CGIには静的なHTMLが一切含まれないことで、読みやすくなっています。
甲子 (きのえね)
乙丑 (きのとのうし)
丙寅 (ひのえとら)
・・・
2019/05/01,令和
1989/01/08,平成
1926/12/25,昭和
・・・
このCGIはPythonで作成しましたが、他の言語でも同様の工夫はできるのではないかとおもいます。
Linux系でファイルとディレクトリの両方を取得するには次のコマンドを実行します
ls -a -l -R --time-style=long-iso /
すべてのファイルを取得するため「/(ルートディレクトリ)」を設定します
出力結果をファイルに書き出すには次のようにします
ls -a -l -R --time-style=long-iso / 1>ファイル名 2>&1
「2>&1」でエラーもファイルに書き出します
ファイルだけを取得したいときは次のようにします
ls -a -l -R --time-style=long-iso / | grep -v "^d" | grep -v "^l" | grep -v "^c" | grep -v "^b" | grep -v "^total " >ファイル名
「grep -v」で先頭文字が{d, l, c, “total “}行を除外します
grepを付けると「2>&1」が無効になってエラーが画面表示されるみたいです
lsの行頭の記号の意味
d : ディレクトリ
l : シンボリックリンク
c, b : デバイスファイル
– : ファイル