Hirologue

年齢を理由にエンジニアになることを諦めないミドルの成長記録

EP 5: Gitはきっと役に立つ

はじめに

Linuxの学習を終え、次はGitです。
「Gitはバージョンを管理するためのものです」とは聞きますが、いまいちピンときませんね。

Excelファイルを思い浮かべてみてください。
誰かが計算用ワークシートを作成したとします。
何か改良を加えようとして、元のファイルをコピーしてファイル名を「計算用ワークシート修正中」としてみたり、改良が済めば「計算用ワークシート最新版」として運用することは誰しもやったことがあるのではないでしょうか。
これを続けていくと、様々な計算用ワークシートが誕生し、一体どれが最新のものなのか見分けがつかなくなるのは、良くあることだと思います。
そうならないようにするための仕組みが、Gitであると良く言われています。

しかし、これでもピンと来ない場合は、ゲームのセーブデータを思い浮かべてみてください。
Gitの仕組みはまさしく、ゲームのセーブデータです。

強敵と戦う前にセーブデータ作ってから挑んでみよう。
ダメだったらデータをロードしてレベル上げをやり直そう。もし、ワンチャン勝てたら先に進もう。
このような感じでゲームのセーブデータを作る感覚と同じです。

Gitでは、このセーブデータのことをコミット(コミットポイント)といい、それを使ってバージョンを管理しているのです。

さあ、Gitで管理しよう

Gitでバージョン管理するには、PCにGitがインストールされている必要があります。
Macをお使いなら最初からインストールされています。

ターミナルを起動して $ git -v と入力してみてください。

バージョンが表示されるはずです。
ということで、Gitがインストールされている前提で話を進めます。

まずは、ターミナルを起動しましょう。
次にデスクトップに作業用のフォルダ(ディレクトリ)を作成して移動しましょう。
やり方がわからない方は前回の記事を参考にしてください。 hirologue.hateblo.jp

では、作業用のディレクトリに移動したところで、次のコマンドを入力しましょう(ここからは、作業用のフォルダ内で作業します)。

$ git init

たったこれだけのコマンドを実行することで、今いるディレクトリはGitの管理下に置かれたことになります。

超簡単

本当かな?と思ったときは、次のコマンドを実行してみてください。

$ ls -a

実行すると .git という隠しフォルダがあります。
この.gitフォルダが存在していることがGitで管理されている証なのです。

セーブポイントを作成するまで

次は、何か適当にファイルを作成して中身を記述して保存しましょう。

Gitで管理するには、このあとに変更した内容をステージングエリアに追加します。
これは、ゲームで言うところのセーブポイントに到着したと言ったニュアンスに近いのではないでしょうか。
ステージングエリアに変更した内容を追加するには、次のコマンドを入力します。

$ git add . (すべての変更をステージングエリアに追加)
または
$ git add <ファイル名> (任意のファイルをステージングエリアに追加)

さて、この変更内容でセーブデータを作ってみましょう。
入力するコマンドは次の通りです。

$ git commit -m "<メッセージ>"

ここで入力するメッセージのことをコミットメッセージと言います。
コミットメッセージにはどのような変更を加えたのか、なぜ変更したのかなどのコメントを記述します。

この流れを整理すると、次のようになります。

  1. ファイルに何か変更を加える(新規作成を含む)
  2. 変更内容をaddする
  3. コミットする

この3ステップを繰り返すことで変更内容を記録したセーブデータが作られるのです。


今回はここまでとします。
次はGitHubと紐づけてみようと思います。
では✋

EP 4: Linuxの勘どころ

この先、GitやらDockerを学習するわけですが、その前に学習することを避けて通れないのがLinuxです。 Linuxは技術として枯れているため、一度習得すると長く使える技術だそうです。確かに独学していたときに、 「こちらはLinuxに触れたことがある方なら理解しやすのではないでしょうか」的なフレーズを何度か耳にした記憶があります。 そこで、今回はLinuxの勘どころとして、確実に抑えなければならないであろうコマンドをまとめました。

Linuxコマンドを覚えにくいと思ってましたが、どんな単語の略なのかを理解すると驚くほど覚えやすくなります。

基本コマンド

pwd】 今どこで作業しているか知りたい

Linuxで作業を行う際には、現在自分がどのディレクトリにいるのかを把握しておかなければいけません。現在、自分がいるディレクトリのことをワーキングディレクトリ(またはカレントディレクトリ)といいます。

pwdコマンドは、print working directoryの略です。


書き方
$ pwd [オプション]

ここで、[ ]に記述する内容は必須ではありません(以下同じ)。

このコマンドを実行することで現在のディレクトリを表示してくれます。


【cd】 別のディレクトリで作業したい

自分がいるディレクトリとは別のディレクトリで作業を行う場合は、ディレクトリを変更する必要があります。

cdコマンドは、change directoryの略です。


書き方
$ cd [オプション] [ディレクトリ]

cdコマンドで、オプションはあまり使われません。
また、移動先のディレクトリを指定しない場合は、ホームディレクトリ(デフォルトのワーキングディレクトリ)に戻ります。


【ls】 ファイルやディレクトリの一覧が見たい

ワーキングディレクトリあるいは指定したディレクトリには、どのようなファイルやディレクトリが含まれているか一覧を出力するためのコマンドがlsコマンドです。

このlsコマンドはlistの略です。


書き方
$ ls [オプション] [ディレクトリまたはファイル名]

ディレクトリまたはファイル名を指定しない場合は、現在ワーキングディレクトリ内のファイルやディレクトリの一覧を表示します。

例1:ディレクトリを指定
$ ls /

例2:半角スペースで区切って複数のディレクトリを指定することもできます
$ ls / /dev


便利なワイルドカード
ワイルドカード(* や ?)を使うと任意の文字として扱われるので非常に便利です。

  • アスタリスク(*) は任意の文字列として扱われます。
    例えば、”*.html"なら拡張子.htmlがつくファイル一覧
  • クエスチョンマーク(?)は 任意の一文字として扱われます。
    例えば$ ls /bin/z??? とすると、/binディレクトリ内のzから始まる4文字のファイルを表示します。


オプションについて
lsに続けてオプションを加えることで表示される内容が変わります。
lsコマンドでは、次のようなオプションが主に使われます。

  • -a:隠しファイル(設定ファイルなど)も含めたすべてのファイルを表示します。
  • -l:ファイルの詳細情報を表示します。
  • -F:ファイル種別を表示します。


【mkdir】ディレクトリを作りたい

新しくディレクトリを作成するには、mkdirコマンドを使います。

このmkdirコマンドは、make directoryの略です。


書き方
$ mkdir [オプション] <作成するディレクトリ名>

< > で囲まれた部分の記述は必須ですので省略できません。
この場合、作成するディレクトリ名は必ず記述する必要があります。
また、作成するディレクトリ名に日本語を使用すると文字化けするおそれがあります。
したがって、作成するディレクトリ名は英語で記述します。


オプションについて


【rmdir】ディレクトリを削除したい

ディレクトリを削除したい場合には、rmdirコマンドを使います。

このrmdirコマンドは、remove directoryの略です。


書き方
$ rmdir <削除するディレクトリ名>

このコマンドは、削除しようとするディレクトリ内に何もない場合のみ実行できるコマンドです。 ディレクトリ内にファイルやディレクトリが存在するとエラーになります。

実は、後述するrmコマンドでもディレクトリの削除は実行できるので、rmdirコマンドの使用頻度はそれほど高くはないのが現状のようです。
しかしながら、rmdirコマンドを使用すれば、「隠しファイルなどがディレクトリ内に残っていることを知らずに削除してしまった」といった事故を未然に防ぐことができます。

個人の好みや開発チームの意向などでrmコマンドと使い分けるのが良いと思います。


【cat】ファイルの中身を見たい

ファイルの中身を確認するためには、catコマンドを使います。

このcatコマンドは、concatenate(連結の意)の略です。


書き方
$ cat [オプション] <ファイル名>

ファイルの中身を表示したいときに使用します。


オプションについて

  • -n:行番号を表示します。

コマンドの語源のconcatenateは「連結」という意味ですので、元々は複数のファイルの中身を表示するためのものでした。
ファイル名を半角スペースで区切って記述することで、複数のファイルの内容を表示することができます。


【less】 長いファイルの中身をスクロール表示したい

catコマンドでファイルを表示できるようになりましたが、ファイルの中身が長い場合、画面に収まりきりません。私たちがいつもWebサイトを見るように、スクロールしてファイルの中身を確認できたら便利ですよね。
そんなときに使うコマンドがlessコマンドです。

lessコマンドは何かの略ではなく、元々あったmoreと言うコマンドを使いやすくしたこともあって、moreの逆という意味でlessとなったようです。


書き方
$ less [オプション] <ファイル名>

コマンドを実行すると別のウィンドウが開いて、コマンドを待機した状態になります。
スクロール操作と検索のコマンドは以下の表の通りです。


スクロール操作

キー入力 動作
f or space 一画面下にスクロール
b 一画面上にスクロール
j 1行下にスクロール
k 1行上にスクロール
q lessコマンドの終了


検索

キー入力 動作
/ + <文字列> 下方向に向かって検索
? + <文字列> 上方向に向かって検索
n 次の検索結果に移動
N 前の検索結果に移動


【tail】 ファイルの末尾の内容を表示させたい

ファイルの末尾の情報が欲しい場面では、tailコマンドを使います。
ファイルの末尾だから、尻尾を意味するtail わかりやすいですね。


書き方
$ tail [オプション] <ファイル名>

オプションで指定しなければファイルの末尾10行の内容が表示されます。


オプションについて

  • -n [行数]:表示したい行数を指定します。
    例)$ tail -n 5 README.md : README.mdの末尾5行を表示します。

  • -f:ファイルの内容が書き換えられるとリアルタイムに表示します。
    例)$ tail -f output.log
    output.logファイルに追記されるたびに追記内容が表示されます。
    tailコマンドを終了するには、control + c を入力します。
    Linuxの運用作業などでログファイルの監視に良く使われる方法のようです。知識の一つとして留めておきましょう。


【touch】 新しくファイルを作りたい

新しくファイルを作るには、touchコマンドを使います。


書き方
$ touch <ファイル名>

ファイルが存在しない場合は、空のファイルを作成します。
一方、ファイルが存在する場合はタイムスタンプを更新します。
touchコマンドは、元々タイムスタンプを更新するいう働きを持っています。したがって、既存のファイル名を指定した場合は、間違って上書きするのを防いでくれるメリットがあります。

このようなことから新しくファイルを作成する場合には、touchコマンドが使われています。


【rm】 不要なファイルを削除したい

不要なファイルを削除するには、rmコマンドを使います。
rmdirコマンドでも触れましたが、rmコマンドでディレクトリの削除を実行することもできます(詳しくは「オプションについて」を参照してください)。

rmコマンドは、removeの略です。


書き方
$ rm [オプション] <削除するファイル名>

rmコマンドは実行すると、即時消去されます。実行後は元に戻せないので注意が必要です。


オプションについて

  • -r:ディレクトリも合わせて削除します。
    ディレクトリ内のデータやディレクトリもまとめて削除。使用時は注意を要する。

  • -f:ファイルを削除する際に警告文を表示しません。
    いかなるものでも強制的に削除してしまいます。使用する際は十分に確認を行いましょう。

  • -i ファイルの削除前に確認する。

超重要:-rf オプション
オプションで -rf を指定してコマンドを実行すると、ディレクトリ内のデータ(隠しファイルも含みます)を強制的に跡形もなく消し去ります。もちろん実行後は元に戻すことはできません。
このオプションを使用する場合には、相当の覚悟が必要です。ご注意ください。


【mv】ファイルを移動させたい / リネームしたい

ファイルやディレクトリを別の場所に移動させたり、リネームする場合にはmvコマンドを使用します。
mvコマンドは、moveの略です。


書き方
$ mv [オプション] <移動元> <移動先>

ファイルやディレクトリを移動させるかリネームするかは自動で判別されます。


オプションについて

  • -i:コマンドを実行して上書き前に確認します。


【cp】ファイル・ディレクトリをコピペしたい

mvコマンドを使うと別の場所にファイルやディレクトリを移動できましたが、cpコマンドはコピペするためのコマンドです。

cpコマンドはcopyの略です。


書き方
$ cp [オプション] <コピー元> <コピー先>

コピー先に同じ名前のファイルが存在する場合は上書き保存します。
また、ディレクトリに対してコマンドを実行するにはオプションを指定する必要があります。


オプションについて

  • -i:上書きする前に確認します。
  • -r:ディレクトリをコピーする場合に使用します。
    このオプションを指定せずにディレクトリをコピーするとエラーになります。



一歩先ゆくためのコマンド

【ln】 リンク機能を使いたい

Linuxではファイルに別名をつけることができます。
この別名をつけることを「リンクを張る」といいます。
リンクを張るコマンドがlnコマンドで、linkの略です。

また、リンクには「ハードリンク」と「シンボリックリンク」の2種類があり、次のような特徴があります。

  • ハードリンク

    • 1つのファイルの実体に複数の名前を付ける機能です。
    • 元のファイルを削除しても消えません。
    • すべてのハードリンクがなくなったときに削除されます。
  • シンボリックリンク

    • リンク先のパス名が書かれた特殊ファイルです
    • リンク先がファイルの実体です(Windowsのショートカットと似ています)
    • シンボリックリンクを削除しても元ファイルは参照できます。
    • シンボリックリンクを残したままファイルの実体を削除したり、ファイルを移動すると、ファイルを参照できなくなります。あるべき場所にファイルがなくなり、探せなくなるためです。
      このことを「リンクが壊れた」といいます。


このようなリンクを張ることで、ファイルをコピーしたり移動したりすることなく別のディレクトリにあるように扱えるようになります。

このリンクを使う利点は次の2つです。

  • 長くて複雑なパス名を省略して、入力ミスを軽減できる
  • 複数バージョンを共存させて、最新バージョンを区別できる


書き方
$ ln [オプション] <リンク元ファイル名> <リンク名>

オプションを指定しないと、ハードリンクになります。


オプションについて

ハードリンクは色々と制約が多いことから、シンボリックリンクを使うことが多いようです。

【find】 条件を指定してファイルを検索したい

その名の通り探す(ファイルを検索する)ためのコマンドです。


書き方
$ find <検索開始ディレクトリ> <検索条件> <アクション>

このコマンドは、検索開始ディレクトリを起点に検索を開始して、検索条件にヒットしたものについて指定したアクションを実行します。


検索条件について

  • -name:ファイル名の大文字小文字を区別して、ファイルを検索します。
    例)$ find . -name README.md -print

  • -iname:ファイル名の大文字小文字を区別しないで、ファイルを検索します。
    例)$ find . -iname readme.md -print

  • ワイルドカード(* や ?)が使えます。ただし、検索したいファイル名をシングルクォートで囲む必要があります。
    例)$ find . -name '*.html' -print

  • ファイルの種類で検索することもできます。
    -type f(通常ファイル)、-type l(シンボリックリンク)、-type d(ディレクトリ)



ファイルのアクセス権限や所有者の変更

Linuxは複数人が一台のコンピューターにログインして操作することが前提で作られています。
Linuxはサーバーやスーパーコンピューターなどに良く使われています。そういった環境では色んな人がログインして使っているため、それぞれが操作できると消しては行けないものを消されたり、勝手に設定を変えられたりする問題がどうしても起きてしまいます。
そのような問題を避けるために、システムの設定は管理者しかできないようになっていたり、ファイルのアクセス権限はユーザー毎に決められています。
このファイルへのアクセス権限のことをパーミッションといいます。

このパーミッションを理解していないと、サーバーで作業して、ファイルへのアクセス権限がなくてエラーが発生した場合に問題解決できずに詰んでしまうことになります。

パーミッションを確認しよう

まずは、何か適当なファイルのパーミッションを確認してみましょう。

確認するには、$ ls -l <ファイル名> を使用します。
ここでは /bin/cat ファイルのパーミッションを確認してみます。

アクセス権限と所有者

実行結果の1文字目がファイルタイプを表しています。
ファイルタイプの見方は表のとおりです。

表示 ファイルタイプ
- 通常ファイル
d ディレクト
l シンボリックリンク

ファイルタイプに続く9文字(rwxr-xr-x)をファイルモードといい、このファイルのパーミッションを表しています。
ファイルモードは3文字毎に1つのブロックとなっていて、「所有者」、「グループ」、「その他のユーザー」のパーミッションを表しています。
パーミッションは、「r」、「w」、「x」の3種類で表現されます。

表示 意味(権限)
r 読み取り(read)
w 書き込み(write)
x 実行(execute

このことから、 /bin/cat ファイルは

  • ファイルタイプは通常ファイルである
  • 所有者は、読み取り・書き込み・実行の権限がある(rwx)
  • グループとその他のユーザーは、読み取り・実行の権限があるが、書き込み権限はない(r-x)

ということがわかります。


【chmod】ファイルへのアクセス権限を変更したい

$ ls -lコマンドで表示されたファイルモードを変更して、アクセス権限を変更するにはchmodコマンドを使用します。
このchmodコマンドは、change modeの略です。

chmodコマンドの書き方は、「シンボルモード」と「数値モード」の2通りの方法があります。


書き方(シンボルモード)
$ chmod [ugoa] [+-=] [rwx] <ファイル名>

例)$ chmod u+w test.txt

記号 意味
u 所有者
g グループ
o その他のユーザー
a すべてのユーザー
記号 意味
+ 権限を追加する
- 権限を禁止する
= 指定した権限と等しくする

シンボルモードでは、指定したファイルに対して、どのユーザーに対して(u, g, o, a)、どの権限(r, w, x)をどうするか(+, -, =)がわかりやすいようになっています。
このようにシンボルモードによる変更は相対的な方法です。したがって、パーミッションの一部だけを変更したい場合に便利です。


書き方(数値モード)
$ chmod <8進数の数値> <ファイル名>

例)$ chmod 755 test.txt

パーミッション 数値
読み取り(r) 4
書き込み(w) 2
実行(x) 1

数値モードでは、所有者、グループ、その他のユーザーに与える権限を下表の数値に置き換えて、その値を足し合わせた8進数で表します。
この例では、755となっていますが、これはrwx r-x r-xを表しています。
つまり、所有者はすべて許可されているので、4+2+1=7、グループとその他のユーザーは読み取りと実行が許可されているので、4+1=5ということになります。
このように数値モードでは、元のパーミッションによらず、新しいパーミッションに変更します。

なお、このコマンドを実行できるのは、ファイルの所有者かrootユーザーに限られます。


【chown】 ファイルの所有者を変更したい

先程の$ ls -lコマンドの実行結果をもう一度見てみます。

アクセス権限と所有者

ここでは、パーミッションの表示の右側に「root」と表示されています。
これが、ファイルの所有者です(右隣はグループ)。
rootユーザーがこのファイルの所有者ということになります。

ファイルの所有者を変更するには、chownコマンドを使います。
chownコマンドは、change ownerの略です。


書き方
$ chown <変更後の所有者名> <ファイル名>

なお、このコマンドを実行できるのはrootユーザーだけです。



プロセスの確認と終了

プロセスについて

Linuxでは、実行中のプログラムのことをプロセスといいます。
コマンドを実行すると、実行ファイルをメモリに格納して、メモリ上でCPUがプログラムを実行します。
一つ実行すると、新しいプロセスが一つ作られることになり、プロセスID(PID)が付与されます。

【ps】動作中のプロセスを確認したい

現在動作しているプロセスを確認するには、psコマンドを使います。 このpsコマンドは、process statusの略です。


書き方
$ ps [オプション]

他のコマンドとは違って、psのオプションには、ハイフン(-)を付けません。

最も使うオプションは、auxで、全ユーザーのプロセスを詳細情報を合わせて表示します。
a:すべてのユーザーのプロセス
u:詳細情報を合わせて表示
x:psコマンドを実行したユーザーのすべてのプロセス


【kill】プロセス(ジョブ)を終了させたい

間違ったコマンドを実行したり、重たい処理を行ったりしてメモリやCPUを専有してしまうことがあります。
メモリやCPUを開放するためにプロセスやジョブを終了させるコマンドが、killコマンドです。 このkillコマンドは、kill processの略です。


ジョブについて
複数のプロセスを同時に処理している場合、そのまとまりのことをジョブといいます。
ジョブの一覧を表示するには、$ jobsコマンドを実行します。
コマンドを実行して[ ]内に表示される数字をジョブ番号といいます。

ユーザーが対話的に操作しながら処理が実行されているジョブをフォアグラウンド、その逆をバックグラウンドのジョブといいます。

フォアグラウンドのジョブは control+c で終了できますが、バックグラウンドのジョブに対しては、killコマンドを使わないと終了できません。


書き方
$ kill [ オプション] <プロセスID>
$ kill [ オプション] %<ジョブ番号>

正確には、killコマンドはシグナルを送信するコマンドです。
$ kill -<シグナル名> <プロセスID>

デフォルトでは、終了を指示するTERMというシグナルを送信しています。
例) $ kill 4965$ kill -TERM 4965
この2つのコマンドは同じ意味です。


状況次第ですが、「SIGKILL」という強制終了のシグナルを使うこともあります。
また、シグナルには番号も割り当てられていて、SIGKILLコマンドには9番が割り当てられています。

例えば、PIDが4965のプロセスを強制終了するには、
$ kill -SIGKILL 4965 または $ kill -9 4965とします。

この SIGKILL は最終手段として、このようなコマンドがあるということを覚えておきましょう。
イメージ的には、PCをシャットダウンせずに電源を切る行為と同じですので、無闇矢鱈と使うものではありませんので、ご注意ください。



Linuxの基本的な部分を列挙してみましたが、枯れている技術とはいえ学ぶべきことは多いですね。
ただ、Web上にはLinuxに関する情報は非常に多くありますので、気になることがあればすぐにググって調べてみるのと良いと思います。
それでは、また!

EP 3: 49歳の挑戦(1ヶ月目を振り返る)

2024年3月1日にHappiness Chain Euforia 2期生として入会してから早いもので1ヶ月が経過しようとしています。
本記事では、この1ヶ月間で学んだことをダイジェストで振り返りたいと思います。

50歳目前の私が入会を決意するまでの経緯を書いたポエムは👇こちら hirologue.hateblo.jp

3月の学習時間(期間:3/1 - 3/30)

3月の学習時間は 145 時間 でした。

学習時間の目安として、休日は8時間、平日は3時間を基本としていました。
これをカレンダーに当てはめると、今月の目標学習時間は140時間ということになります。

今月の学習時間が145時間でしたので、目標学習時間 +5時間を達成できました!
学習日数が30日ですので、一日あたりの学習時間は 290分(4時間50分)となりますね。

初月だから張り切って学習に望んだのもあるとは思いますが、

  1. 部屋にこもって学習することに家族が協力的であったこと
  2. 有給休暇を取得できて集中的に学習できる日があったこと

これらが、大きな要因かなと思っています。

また、目標学習時間 +5時間に注目してみます。
この5時間、つまり300分を学習日数の30日で割ると、10分 / 日 となります。
つまり、1日10分 スマホを握りしめてSNSを巡回する、ダラダラとYouTubeやTVを見るといったことをやめれば、1ヶ月で+5時間は行ける!ということに気づけました。

などと、偉そうなことを言ってますが、私は「歩く怠惰」です。
自戒の念を込めてあえて文字にします。

1日たった10分でいい、無駄なことをやめて、あと10分頑張ろう!

3月の学習内容

はじめにHappiness Chain(以下、HCとします)におけるマナーというか、決まりごとからスタートしました。
HCでは、学習を行ったあとに日報の提出が求められます。さらに週末には週報、月末には月報(本記事)を提出します。
それを知ったとき、正直「うわぁ、マジかよ・・・面倒くさい」と脊髄反射的に思ってしまったことをお詫びします。

しかし、HCのWebサイト内の「学習の流れ ⑤ 日報を書く」には、こう書いてあります。

学習した日は必ず日報を書いてメンターに提出します。日報では今日学んだこと、できるようになったこと、わからなかったこと、感想、などを書きます。実際に現場でWeb系エンジニアとして働く場合、テキストでのコミュニケーションが非常に重要になります。日頃から日報やコードレビューでのやりとりを通じて、テキストでのコミュニケーションがうまくなります。卒業までに書いてきた日報は、学習を継続できる人であること、スキルがある証として転職活動にも使えます。

うん、確かに。技術の流行り廃りが目まぐるしく変わるIT業界において、学習を継続できるというのは立派なスキルですしね。
テキストでのコミュニケーションが多い業界でもあるわけですから、日報の作成を通してしっかり身に着けなければなりませんね。

それならば、とことんやるっきゃない。

こうして、HCでの第一歩を踏み出し、いよいよカリキュラムに入りました。

プログラミングに触れてみよう

プログラミング初心者が必ず使うであろうサービスを利用して、これから学習する言語などの概要、基礎的な部分を学びました。
私も数年ぶりに利用しましたが、懐かしいなという感覚とプログラミングを始めたときのワクワクした感覚を噛み締め、学習しました。
それと共にいよいよ始まったんだなという実感も湧きました。

Web技術の基礎を学ぶ

プロのWebエンジニアを目指すには、自分たちが取り扱う技術の基礎的な部分を知っておかなければいけません。
普段から何気に使っているWebの裏側では、どのようなやり取りがあるのかを知る機会になりました。

学習した内容はこちら👇
EP 1: 身近な例えで学ぶWeb技術の用語 - Hirologue

VimLinux

言葉として「Vim」のことは知っていましたが、面倒くさそうだったので敬遠してきました。 しかし、Vimはエンジニアにとって非常に重要なツールの1つであって、コーディングの効率化にも大きく寄与するという事実を知りました。

カーソルの動きに慣れないなぁと思いながら、毎日練習を続けていくと少しずつ独特の操作に慣れました。
3日もするとあまり考えずに基本的な操作ができようになりました。
練習の効果凄い!

たまに日本語入力のままNORMALモードでカーソルを移動させようとして「っっj」ってなりますが(笑)

学習した内容はこちら👇
EP 2: Vimを使いこなしてデキるエンジニアになりたい - Hirologue

Linuxは現在進行中でして、進捗具合として30%くらいが終わったところです。
この学習の振り返りは来月ということで。

今月の感想

HCに入会して初めにSlack内の自己紹介チャンネルで自己紹介をしましたが、そのときに皆さんから温かく迎え入れてもらえたことがとても印象的でした。
これまでは独学でしたので孤独だったわけですが、こうして同じ志を持つ仲間ができたことがすごく嬉しかったです。
本当に入会してよかったと思った瞬間でした。

大好きなゲームには目もくれず、ビッグタイトルのFF7 REBIRTHもガン無視し、毎日学習を継続できたことに驚いています。 また、こうして学習したことを振り返ると、プロを目指して着実に歩みを進めているんだなと感じます。

HC生のみなさん今後ともよろしくお願いします。


4月のターゲット

学習カリキュラムに沿って、Dockerまで行けるようにしたいです。


早くPythonのコード書きたいとか、
先輩方に早く追いつきたいなど色んな事を考えてしまいますが、

他人と比較せず、焦らず、学習カリキュラムにしたがって、日々、愚直に邁進します!

では、また来月!

EP 2: Vimを使いこなしてデキるエンジニアになりたい

さあ、Vimをはじめよう

そもそも Vim ッテ ナンダ?

Vim」というワードはこれまで何度か耳にしたことがありましたが、面倒そうなのでスルーしていました。
なぜなら、VSCodeのように便利なエディターが周りにあるからです。

しかし最近になって、Vimはエンジニアにとって非常に重要なツールの一つであるという事実を知りました。

Vimについて調べると、次のような特徴があることがわかりました。

  • サーバーの構築の際にVimしか使えない環境もある
  • マウスを使わずに作業をするため、作業効率が上がる
  • VSCodeなどのエディターでもプラグインで使用できる など

そして、これが大事です。「デキるエンジニアはVimを華麗に使いこなす」らしい。

デキるエンジニアを目指したい私としては、Vimをイチから学ぶことにしました。
本記事では、はじめてVimを使ってみて、必要な基本操作を私なりにまとめてみました。

Vimの起動

Vimを起動するには、ターミナルを起動して次のコマンドを入力するだけです。
$ vim

ファイル名を併記すればVimが起動してファイルを開きます。
例えば、sample.txtと言う名前のテキストファイルを開くなら
$ vim sample.txt
と入力します。

Vimの終了

Vimを終了するには、変更があるかどうかで入力するコマンドが違います。

キー入力 説明
:q Vimを終了(変更がある場合は終了できません)
:q! 変更を破棄してVimを終了

変更した内容の保存

Vimではファイルの内容に変更があっても、自動的に保存されません。
内容を変更した場合は、忘れずに保存しましょう。

キー入力 説明
:w 変更した内容を保存
:w ファイル名 ファイル名に保存(指定のファイルがなければ新規作成)
:wq 保存して終了

3つのモード

Vimには、3つのモードがあります。 このモードを切り替えながら作業をします。

モード キー入力 説明
NORMAL esc エディターを操作するときに使うモード
INSERT i 文字を入力するときに使うモード
VISUAL v 範囲を指定して操作するときに使うモード

基本的な操作は、NORMALモードで行います。
ここからは、特に断りがなければNORMALモードで操作を行います。

Vimを学ぶ際の注意点が2つあります

  • caps lock は OFF にしましょう(大文字と小文字で挙動が違うことがあります)。
  • 日本語入力ONのままではモードの切替ができません。かならず 英数入力 にしましょう。

特に日本語入力ONのまま操作してしまうのは 「Vimあるある」 だと個人的に思います。


意のままにカーソルを動かそう

基本のカーソル移動

Vimでは、マウスを使わずにキー入力によってカーソルを移動させます。
使うキーは、 h j k l キーです。
キーボードをよく見てください。これらのキーは一列に順番に配置されていますね。
それぞれのキーを押すとカーソルが一つ移動します。

キー入力 移動方向
h
j
k
l

便利な移動方法

1文字ずつカーソルを移動させましたが、なんだか移動が面倒だなと感じますね。
Vimには便利な移動方法があります。

キー入力 移動方向
w 次の単語の先頭に移動
e 現在の単語の末尾に移動
b 前の単語の先頭に移動
$ 行末に移動
0 行頭に移動

これまで紹介した移動の方法をVimでは、モーションと呼びます。
この他にもモーションはたくさんありますが、ここにあげたモーションはマスターしましょう。

モーションの前に数字を付け加えることで、その数字の分だけ繰り返してくれます。
例えば、
2l 2文字分右へ移動
2w 次の次の単語の先頭に移動
といった具合です。

数字 + モーション の組み合わせはものすごく便利ですので、キッチリ使いこなせるようにしましょう!


効率的なテキスト編集を学ぼう

カーソルの移動方法がわかったところで、次は入力済みの内容を編集する方法を学びましょう。

1文字だけ消す

消したい文字の上にカーソルを移動させます。
x を入力することで、カーソルの下の文字を削除できます。
また、 x の前に数字をつけると指定した文字数を削除することができます。

例)
3x カーソルの位置から3文字削除

削除(オペレータ: d)

単語単位で削除をしたりする場合、x をポチポチしているようでは作業効率が良くありません。

単語や行単位で削除したいときには、d に続けてモーションを入力するとまとめて削除できます。
代表的な組み合わせをまとめました。

キー入力 説明
dw カーソル位置から単語の末尾まで削除(空白を含む)
de カーソル位置から単語の末尾まで削除(空白を含まない)
d$ カーソル位置から行末まで削除
d0 カーソル位置の左から行頭まで削除

もちろん、モーションの前に数字を付け加えて、d2w のようにすることもできます。

このようにモーションの前につくコマンドのことをオペレータ(またはオペレータコマンド)と呼びます。
オペレータは二重に入力することで、行全体に作用させることができます。

例えば、dd と入力すると行全体を削除します。
これを使えば、0 と入力してカーソルを行頭に移動させて、d$ と入力しなくてもいいんです。
すごく便利ですね!

INSERTモードへの切り替え方法

NORMALモードからINSERTモードへ切り替える方法は、冒頭で紹介した方法の他にもいくつかあります。
カーソル移動を伴う切替方法をまとめました。

キー入力 説明
i カーソル位置の左にカーソルが移動し、INSERTモードに切り替わる
I 行頭にカーソルが移動し、INSERTモードに切り替わる
a カーソル位置の右にカーソルが移動し、INSERTモードに切り替わる
A 行末にカーソルが移動し、INSERTモードに切り替わる
o カーソルの下に1行追加して、INSERTモードに切り替わる
O カーソルの上に1行追加して、INSERTモードに切り替わる

変更(オペレータ: c)

修正したい箇所にカーソルを移動させ、削除して、INSERTモードに切り替えて内容を変更する場面も多いと思います。
でも、何だか手数が多い気がしますね。

修正したい箇所を削除したらINSERTモードに自動で切り替わって欲しい。
そんな願いを叶えてくれるのが c という変更を行うオペレータです。
オペレータですので、削除の d と同じくモーションと組み合わせて使用します。

モーションとの組み合わせの一例をまとめました。

キー入力 説明
cw カーソル位置から単語の末尾まで削除(空白を含む)し、INSERTモードに切り替わる
ce カーソル位置から単語の末尾まで削除(空白を含まない)し、INSERTモードに切り替わる
c$ カーソル位置から行末まで削除し、INSERTモードに切り替わる
c0 カーソル位置の左から行頭まで削除し、INSERTモードに切り替わる
cc 行全体を削除し、INSERTモードに切り替わる

もちろん、モーションの前に数字を付け加えて、c2w のようにすることもできます。

1文字だけ置き換え

コードを書けばかならず発生するタイポ、これを修正するときに便利なのが置き換えのコマンドです。

修正したい箇所にカーソルを移動させます。
r に続けてタイプした文字に置き換わります(1文字だけ)

タイポを発見して、1文字消して、INSERTモードに切り替えて修正といった手間を減らすことができるので、すごく便利ですね。

undoとredo

文字の編集を行えば、操作を誤ることもあります。
Vimでは、元に戻す( + Z)、やり直す( + Shift + Z)と同じことをできます。

キー入力 移動方向
u 最後の変更を元に戻す(undo)
U 行全体の変更を元に戻す(undo)
control+r 元に戻した変更をやり直す(redo

コピー(ヤンク)してペースト(プット)する

Vimでは、私たちが慣れ親しんだコピーとペーストのことをそれぞれ、ヤンクとプットと呼ぶようです。
それはさておき、ヤンクはオペレータです。
ヤンク(yank)の頭文字である y とモーションを組み合わせて使用します。

例によって組み合わせの一例をまとめました。

キー入力 説明
yw カーソル位置から単語の末尾までヤンク(空白を含む)
ye カーソル位置から単語の末尾までヤンク(空白を含まない)
y$ カーソル位置から行末までヤンク
y0 カーソル位置の左から行頭までヤンク
yy 行全体をヤンク

コピーした内容をプットするには、p を入力します。
また、Vimでは直前に削除(xd)した内容を保持していて、p でプットすることもできます。

VISUALモードへの切り替え方法

NORMALモードからVISUALモードへ切り替える方法は、冒頭で紹介したとおり v です。

VISUALモードに切り替えた後でカーソルを移動させると移動した軌跡が強調表示されます。
ちょうど、マウスを使ってドラッグして範囲指定をするのと同じ感じです。

例えば、この状態で
d を入力すると、指定した範囲の文字を削除します。
y を入力すると、指定した範囲の文字をヤンクします。

VISUALモードを使うことで、普段マウスを使って範囲を選択して、コピペするという作業がVimでできますね。


もっと便利に使うために

画面のスクロール

画面に表示されていない部分を見たいとき、画面をスクロールさせたくなりますよね。
マウスを使わないVimでも画面スクロールができます。

キー入力 説明
control + e 画面を下方向にスクロール
control + y 画面を上方向にスクロール

指定した位置にカーソルを移動

先頭行、最終行、あるいは指定した行番号まで一気にカーソルを移動させることもできます。

キー入力 説明
gg ファイルの先頭行に移動
G ファイルの最終行に移動
行番号 g 指定した行番号に移動

特に 行番号 g の移動はエラーの修正時に一気に飛べて便利そうですね。

対応する括弧の検索

コードを書いて括弧のネストが深くなると括弧の閉じ忘れでエラーになることがあります。
そんなときは、調べたい括弧にカーソルを移動して % を入力するだけです。

そうすると(), [], {} に対応する括弧を検索することができます。

この機能は括弧のデバッグに威力を発揮しそうですね。

検索

ファイルの中から探したい語句を検索するには、/ 探したい語句 enter と入力します。

同じ語句をもう一度下方向に検索するときは n を押します。
同じ語句を現在位置から上方向に検索するときは N を押します。

置換

修正前の語句(old)を修正後の語句(new)に置換する方法をまとめました。

キー入力 説明
:s/ old / new 現在の行で最初にヒットした oldnew に置換
:s/ old / new /g 現在の行の oldnew にすべて置換
: 開始行 , 終了行 s/ old / new /g 行を指定して oldnew にすべて置換
:%s/ old / new /g ファイル内の oldnew にすべて置換
:%s/ old / new /gc ファイル内の old を1つずつ確認しながら new に置換

検索・置換のオプション設定

検索・置換のオプション設定も用意されています。

キー入力 説明
:set ic or :set ignorecase 検索時に大文字小文字の区別をしない
:set is or :set incsearch 検索フレーズに部分マッチしている部分を表示
:set hls or :set hlsearch マッチするすべてを強調表示

設定したオプションを無効にするには、set のあとに no をつけます。 例 :set noic

REPLACEモード

冒頭でVimにはモードが3つあるといいましたが、ごめんなさい。
実は4つ目のモードがあります。

NORMALモードで R を入力すると、REPLACEモードに切り替わります。

このモードでは、カーソルの下にある文字を直接変更できます。
REPLACEモードを抜けるには escを押します(NORMALモードに切り替わります)。


いかがだったでしょうか。
この基本を抑えたらあとは、実践あるのみです。
Vimを使いこなしてデキるエンジニアを目指しましょう!

では、また

EP 1: 身近な例えで学ぶWeb技術の用語

Web開発をガチで学ぶにはWeb技術の基本的な用語について知っておく必要があると思います。 本記事では、学習を進めるにあたってよく耳にするであろうWebまわりの用語を身の回りのシチュエーションで例えてみました。

コンビニなどのお店を想像しよう(リクエストとレスポンス)

あなたは近所を散歩していて、休憩しようとコンビニに立ち寄りました。
カウンターの店員さんが「いらっしゃいませ」と迎えてくれます。
のどが渇いていたので、「ホットコーヒーのSサイズください」と店員さんに伝えました。
店員さんは「ホットコーヒーのSサイズですね。こちらをどうぞ」とホットコーヒーを渡しました。

Webシステムでは、あなたのことを「クライアント(Client)」、店員さんのことを「サーバ(Server)」といいます。
これらの英単語を訳せば、お客さんと給仕人ということですね。
お客さんであるあなたは自分の欲しいものを伝えました。
これが「リクエスト(request)」、ホットコーヒーのSサイズが欲しいという要求を伝えたわけです。
注文を聞いた店員さんが注文の品を渡しました。これが「レスポンス(response)」、受けた注文に応えて、ホットコーヒーのSサイズを渡しています。

したがって、私たちがWebサイトを閲覧するとき、クライアントが「〇〇のサイトが見たい」とリクエストします。そして、それを受けたサーバがレスポンスとして、〇〇のサイトのファイルを探してクライアントへ渡す。といった一連の流れになるわけです。

宅配便を想像してみよう(プロトコルとポート番号)

あなたは運送会社で働く宅配ドライバーです。
お預かりした大切な荷物をお客様の元に届けるには、汚してはいけない、時間の指定があればその時間に届けなければならないなど会社で定めたルールにしたがわなければなりません。会社で決めたルールをキッチリ守って荷物を運び、お届け先のマンションに到着しました。
そこで、お届け先の住所の部屋番号を確認したところ、お届け先は201号室のようです。 あなたはインターホンを鳴らし、住民の方にお預かりした荷物を無事届けることができました。

この運送会社が定めた荷物を運ぶためのルールのことをプロトコル(protocol)といいます。 プロトコルには、Webページを閲覧するためのものやメールの送信など色々な種類があります。
また、荷物のお届け先の201号室のように荷物を受け取る場所のことをポート番号といいます。このポート番号はアプリケーションによって決められる番号です。
Web上でのデータの送受信に関するルールを定めたものとして、HTTP(HyperText Transfer Protocol)があります。このHTTPでは、ポート番号80番を使用することになっています。 このように、アプリケーションによってあらかじめ決められているポートのことを「ウェル・ノウン・ポート(Well Known Ports)といいます。

なじみの店を想像してみよう(ステートフルとステートレス、Cookie

仕事も一段落し、昼食はいつものラーメン屋にしました。
あなたには、こだわりの注文方法があります。
「醤油ラーメン、大盛り、麺硬め、油少なめ、野菜マシ」いつもこれです。
店の大将も「あなた=この注文」の図式が完成しています。なので、注文するときは一言「いつもの」そういえばいいんです。
周りのお客さんは誰もそんな注文の仕方をしていません。私だけでした。
ある日、大将が「お店に私がいなかったら、これを見せて『いつもの』といってください」とあなたに小さなカードを渡しました。
次の日、いつものラーメン屋に行きましたが、大将は不在でした。 早速あなたは大将からもらった小さなカードを出して、「いつもの」と注文したのでした。
そして数分後、いつもどおりのラーメンがあなたの前に運ばれてきました。

あなたはいつもお店で同じ注文なので、大将には「いつもの」で通じていました。このような状態のことをステートフル(stateful)であるといいます。
一方、他のお客さんのように「いつもの」が通じないことをステートレス(stateless)であるといいます。
また、大将をサーバと見立ててみましょう。
大将の立場になって考えてみれば、お昼時に来るすべてのお客さんの注文内容をずっと記憶することは、かなりの高負荷であることは容易に想像できるでしょう。
それなので、Webサイトのようにたくさんの情報をやりとりする場合、すべて覚えていては効率も悪く、処理しきれないので、HTTPはステートレスなプロトコルとなっています。
では、ステートレスなのに、私たちが普段閲覧しているWebページが以前の情報を維持しているのはなぜでしょうか。
そこにはクッキー(Cookieという技術が使われています。ラーメン屋の大将が渡した小さなカードがそのクッキーにあたります。この小さなカードには、「いつもの注文の内容」が書かれていると思ってください。
だから、大将が不在でもこの小さなカードを出して「いつもの」と注文できたのです。
便利ですね。

このようにWeb系の技術は何か問題があって、それを解決するために次の技術が生まれてといった具合に時々刻々と進化しています。新しい技術を学ぼうと思ったら、その背景を知ることも大事なのですね。


IT系の用語は中々イメージを掴みにくいものや概念が難しいものが多い気がします。
でも、このように噛み砕いてしまえば理解しやすくなるのではないでしょうか。
この内容が役に立ったら幸いです。

(ひとりごと)
昔から気になっていたんですが、理科の実験で使う「ビーカ」であったり、前述の「サーバ」みたいに長音記号が省略された表記に違和感があります。今は気にしないでいいようですが、中には気にする方もいるようですね。個人的には相手やチームに合わせればいいんじゃないかなと思います。
うちの会社のある年齢以上の方は「pH」のことを「ペーハー」っていいますし(笑)

EP 0: オリジン

はじめまして!このたびプログラミングスクールHappiness Chain Euforia2期生として入会したHiroと言います。このブログは私が50歳目前にして非IT業界からWebエンジニアへの転職を目指す成長記録です。

本記事では、なぜ私がWebエンジニアを目指すのか、その背景をつづりました。

DNA

我が家にとって父は絶対的存在でした。
なぜなら、言ったことは必ずやる、口先だけではなく行動で私たち家族に示す人だったからです。私は、そんな父の後ろについて回る、いわゆるお父ちゃん子でした。

ある日父と初めて海釣りに出かけたときのことです。
一艘の小さな船の前で父は私にこう言いました。
「よーく聞け、この船は俺が作った。俺はな、船で太平洋を横断したかったんだ。でも、母ちゃんと婆ちゃんに猛反対されたんだよ。そんな危ないことはやめてくれ、そもそも船がないじゃないかってね。泣いて頼まれたら、諦めるしかないよな、でもな、船だけは作ろうと決めてたんだよ。だからな、設計図を手に入れて自分でこの船を作ったし、免許も取ったんだよ。ハハハ!ほら、乗れ、行くぞ!」

「ないものは作ればいい、男ならやると決めたらやりきるんだ。」40年以上経った今でも鮮明に覚えています。
それだけ私の心に強く刻まれた出来事だったのでしょう。

ぼくのゆめ

1983年、現代のTVゲーム機の元祖、ファミリーコンピューター爆誕しました。
幼い頃から私はなぜか「コンピューター」と言うワードに強く惹かれていました。
それを知ってか知らずか、ある日、父がファミリーコンピューターを買ってきました。
兄と私は狂喜乱舞。寝食を忘れるほどゲームに没頭しすぎてファミコン本体を取り上げられたりしたこともありました。 それほどまでにゲームが好きだったんです。

いつか、面白いゲームを作ってみたい、つくる人のことはプログラマーっていうのかぁ。
そうだ!プログラマーになろう!それなら工業高校の情報科に進めばいいんだ。
そして、中学3年の冬、私は高校の入学願書を担任に提出したのでした。

第1希望の欄に工業高校の情報科の名を記して。

夢破れる

入学願書締め切りまであと1日。
担任が我が家に電撃訪問してきました。
「お父さん、Hiroくん、大事な話があってきました。」

「第一志望の情報科は志願倍率が高く、Hiroくんの内申点では間違いなく不合格です。」
そう、当時の私は提出物は出さないし、授業の邪魔をしたりとお世辞にも良い生徒とは言い難い存在でした。
思考が停止した私をよそに担任は続けて話しました。

「お父さん、よく聞いてください。
コンピューターもいいですが、これからは化学です。新素材が続々誕生している今、進むべきは化学科です。たしかに情報科に比べて偏差値が低いのは否めません。でも、そこで成績上位をキープすれば学校推薦で大学進学という選択肢ができるんです。
Hiroくんの将来を考えて、化学を学ばせてみてはどうですか?」

そう言って担任は帰っていきました。
私の将来のことを心から心配してくれている担任に父は心打たれ、私に化学科の受験を勧めたのでした。
絶対的存在の父に化学への道を勧められると断れないのが我が家。

私はふてくされ、嫌々ながら受験願書の第1希望の欄を化学科に修正して再提出したのでした。

カガクヲマナブ

年号が昭和から平成に変わって2年が経過した年、私は高校で化学を学び始めました。
「カタカナの化合物名覚えにくいわぁ、ったくよー」とかブツブツ文句を言いながらもゆっくりと化学にハマっていったのでした。

一方、部活は中学から始めた柔道を高校でも続けることにしました。
理由は親友も入るから。高校で続けるほど強くもないのに、単純な理由です。
実はこの柔道部、 悪名高い 厳しいことで有名だったのです。
髪型が坊主一択なのはもちろんのこと、先輩・監督の言うことは絶対。黒いものを白と言ったらそれは白。返事は「はい」か「YES」、怪我をしても「ダメです、無理です、できません」と言ってはならない、など。今の御時世では到底考えられない昭和のストロングスタイルを貫く、まるで軍隊のような部活でした。
それでも続けることができたのは、一緒に頑張った親友の存在が大きかったのは言うまでもありません。
ここで私は、社会の理不尽さを横目に見つつ、どんなに過酷な状況でもやりきる根性を養ってもらったと思っています。

こんな辛い部活動を続けながら授業に睡眠学習を取り入れつつ学業も頑張り、ついに中学時代の担任の目論見どおりに事が運びました。 大学進学決定です。

もちろん、化学系学科です。

守るべきもの

大学に入学したものの、周りとの学力の差に愕然としました。
「やべー、授業の中身がわからん」私の成績は下から数えた方が早いポジションでした。友人の助けも借りながら何とか授業に食らいつき、バイトや飲み会、徹夜で対戦ゲームと学生生活をエンジョイしていました。

そんな私にも彼女ができました。バイト先の系列店で働く社員さん、のちの妻です。
交際から2年、私は学校を出たら、この人と結婚しようと心に決めました。
修論発表も無事終わった頃、私は彼女の家に初めてお邪魔して、ドラマでよくある「あの場面」を再現することになりました。

「娘さんとお付き合いさせてもらってます。この先結婚したいと思っています。よろしくお願いします!」
「わかりました」・・・・・あれ?あっさりOK出たよ。

こうして私は周囲に早すぎると言われながらも、就職してまだ2回しか給料をいただいていない時期に結婚し、翌年には長女が誕生しました。

父になった私は、仕事を終え帰宅して天使の寝顔を見るたびに明日も頑張ろうと誓い眠りにつく日々を送りました。

我武者羅

私が勤める会社は、環境計量証明事業というものを主として行っています。
あまり馴染みのない仕事ですが、工場などから環境中に排出される様々な化学物質を分析して、その濃度などの分析結果を証明書として発行する仕事です。
ニュースでたまに見聞きする「どこどこで、環境基準の◯倍の有害物質が検出されました」のあれです。実はこのような報道の背後には私たちの業界の存在があります。
この仕事には、化学や物理に関する専門知識だけでなく、関係法令や規制の知識、それと堅苦しい法律の中身を噛み砕いてお客様に説明する能力などが求められます。それゆえ、高度な専門性を要する仕事と言えます。

化学分析というのは、 非常に複雑な前処理工程が必要になります。
そして、前処理後の試料を分析装置にかけ、PCで測定結果を解析し、必要なデータを出力します。新しい規制物質が追加された場合には、自社で測定できるのか、どのような機器を購入しなければならないかなど様々な検討事項が発生します。
私は規制物質の追加や規制の変更、新しい分析装置の導入、購入後のルーチン化が必要とされるなら率先して担当し、0→1を達成することにある種のエクスタシーを感じていました。

とてつもない熱量で仕事に励み続けました。
なぜなら、私には家族を守る使命があるから。

忘れもの

長女誕生から7年が過ぎ、待望の第二子となる二女が誕生しました。
二女の誕生をきっかけに、これまでの子育てへの関わりを振り返ってみました。 長女が生まれてから毎日深夜まで仕事ばかりしていたことなど、反省点だらけです。
そこで、これまで強火だった仕事への情熱を中火にしてみよう。新しいことがあれば後輩を育てるためにもあまり動かないようにしよう。
といった具合に、私の中で働き方改革をおこしました。
後輩は私とこれまで一緒に仕事を進めてきたので、引き継ぎは非常にスムーズでした。

仕事内容を引き継ぎ終えた私は、私の手によってルーチン化された分析業務を淡々とこなす毎日を送りました。
「刺激がないなぁ、これじゃ、ただのルーチンワーカーじゃないか、つまらん」
と思いつつ、家族を養うためには仕方がないんだと、自分に言い聞かせながら働き続けました。そして、いつしか私の仕事への情熱は少しずつ弱火になっていったようです。

私が生まれ育った地域では、数えで42歳になる年のお盆に厄払いと中学の同窓会が開催される習わしがあります。
2015年の夏、それは開催されました。
同窓会には中学時代の担任も出席してくださいました。
私はすぐさま担任のもとへお酌に向かいました。
「先生お久しぶりです。お元気そうでなによりです。あのとき先生が化学科を勧めてくれたおかげで、大学にも行けましたし、結婚して子どもも生まれました!本当にありがとうございました!」
卒業から二十数年経っても先生はご健在で
「おお!元気にしていたか!それはよかった。私も化学科を勧めた手前どうなったか心配してたよ。」
先生は続けざまにこう言いました。

「で、その後プログラマーへの道は諦めたのかい?」

忘れていた憧れが頭をよぎる。プログラマーになりたい夢はどうした?

願いを叶えるために

同窓会以降、プログラマー・プログラミングといったワードがふとした瞬間に思い浮かぶようになりました。

「プログラミング始めてみるか?いや、無理だろ」
「プログラミングやってみたいんじゃないか?いや、どうやって勉強するんだ?」
こんな自問自答を繰り広げる頻度は日に日に増えていきました。

ある日、高校生になった長女が大学に進学したいと願い出てきました。勉強を頑張る決意表明した娘の願いを断る理由なんてありません。
しかし、心のなかでは、学費に仕送りにと金銭面での心配が生まれたのも事実です。
いつしか私は、別の収入源を求めてアウトソーシングサイトにたどり着いていました。自分の持つスキルで何かできないかとサイトを隈なく見ているとあることに気づいたのです。

「プログラミングできると単価跳ね上がるな、すげー!やるしかないな、プログラミング」

と、きっかけは俗な理由ですが、やると決めたらやりきる。
幼き日に父が行動で示した教えです。

邂逅 

プログラミング学習を始めるにあたって、まずはプログラミング学習の方法について学び始めました。40過ぎの大人であるというプライドなんてかなぐり捨て、自分を幼児・小学生レベルまで落としました。
ビジュアルプログラミングのScratchからスタートです。
これを楽しめなければ、プログラミングは向いていないと諦めようと決めていました。しかし、そんな不安はどこ吹く風、楽しくプログラムの基本制御構造を学ぶためのいい教材でした。小学校などでプログラミング学習に採用されるのも納得です。
こうして、プログラミングへのアレルギー反応がないことを確認した私は、次のステップとして定番のProgateに進みました。

人生初のサブスク課金にビクつきながら数ヶ月間、色々なコースに挑戦してみました。自分と相性が良さそうな言語を模索するなか、Pythonに出会いました。
「なんてわかりやすいんだ!汎用性も高い人気の言語だと!よし、Progateは終わりだ。次はPythonを学んでみよう。」
そう決心した私は学習教材を探しにすぐさま書店へ向かったのでした。

入門的書籍を一通り終わらせた頃、今更ながらUdemyの存在を知ったのでした。「なんじゃこりゃ、教材の宝庫じゃないか」トキメキました。
興味のある講座を買っては学びを繰り返していたとき、他部署から異動したての部下が何やら困っている場面に遭遇しました。
事情を聞けば、Excelシートに手入力するタイプの証明書を作成しているが、入力ミスが多くて困っているとのことでした。たしかにヒューマンエラーの要因が至る所に散りばめられた、まるで地雷原のような作りをしています。
「こりゃぁ、ミスも起きるよね。これを放っておいたのも俺の責任だ、誰でもミスなく作れるようにするから、少し時間をくれ。」これまでプログラミング学習をしてきた私は、Excel VBAで入力フォームを作ればいけそうだなとすぐに思いつきました。

時間はかかりましたが、完成した入力フォームを部下に使ってもらったところ、これで楽に仕事が進められるとすごく喜んでもらえました。
名ばかり管理職であった私も、明るくなった彼の顔をみて、少しは管理職っぽいことができた喜びと0→1を達成した喜びを噛み締めたのでした。

苦悩

プログラミング学習のモチベーションをキープすることは容易いわけではありませんでした。かく言う私も、学習休止期間が半年以上続いたりしたこともありました。
UdemyでWebスクレイピングを学んだり、DjangoSQLに触れてみたりと独学を続けてきましたが、学習歴だけが増えていくことに不安を感じていました。
「このままじゃ時間だけが過ぎていく、年も年なのに・・・どこかでプロにがっつり指導してもらった方がいいんだよな」と独学の限界を感じはじめました。
それでも独学を続け、「Webアプリで人の役に立つもの作れたらいいよな」と思っていました。

Python学んでいるのに機械学習をやらないのはもったいないかもしれないけど、興味のあるWeb開発の道に舵を切ろうと考え、色々調べてみました。
未経験者は地獄、年齢のことなど、調べなければよかったと後悔もしました。
でも、言われてみれば確かにその通りだなと。私たちの業界に化学の知識がない高齢の方が入社したらどうだろうか?
この先何年働いてくれるかわからない人に手取り足取り教えるだろうか?
自分たちの業界に置き換えれば答えは言わずもがな「ノー」です。
では、どんな人ならOKを出すだろうか?
化学の知識がある。即戦力になれる実力がある。年上だからといって偉そうにせずに周りと調和が取れる。そんな人ならウェルカムです。

じゃあ、どうやって未経験を脱出して即戦力になるほどの実力を身につけるんだい?

決意

そんな苦悩の日々を過ごす中、X(Twitter)を眺めていたときにおすすめにあらわれたのが、ゆうだいさんでした。
私がPythonを学ぶのにフォローしているデータサイエンティストのはやたすさんともつながりがある方なのか、へー。 プロフィールを見ればHappiness ChainというWebエンジニアを養成するスクールを経営している!何ッ!
それならと、Happiness Chainのサイトを早速見てみました。

正直、驚きました。プロになるためにはこんなにも学習するのかと。
それに加えて、プロの現役エンジニアがメンターであること、モダンな技術が学べて、高い自走力と転職成功率・・・すごすぎる!
ここだ!ここなら、門前払いされずに高校受験を前に諦めた夢を叶えることができるんじゃないか、残りの人生かけてみる価値はある!

そう思って、門を叩こうとしましたが、現在生徒の募集は行われていませんでした。
しかし、そんなことで諦めるわけはありません。LINEに友だち登録して募集開始の連絡を待つことにしました。
友だち登録から程なくしてLINEにセミナー開催のお知らせが来ました。

セミナー開催日、私は繁忙期にも関わらずそそくさと帰宅し、ブラウザを立ち上げ画面の前で待機していました。
そのときは来ました。セミナーの内容については書けませんが、驚きの連続でした。
そして、セミナーの最後には生徒募集開始のアナウンスもありました。 ついに来た!
私の中では、学ぶならここしかないと確信していました。
スクールである以上受講料が発生するのは当然、しかし妻は納得するだろうか?
今すぐにでも申し込みたい気持ちをグッとこらえて頭の中を整理することにしました。

数日かけて頭の中を整理しました。妻にはありのままに自分の思いを打ち明けました。
妻は快く承諾してくれました。
妻が出した条件は一つだけ、「スクールを卒業するまで退職しないでほしい」
本当にありがたい。

こうして、私はHappiness Chain Euforia2期生として入会したのでした。

厳しい道のりなのはわかっている。やってみせる!


ここまで読んでいただきありがとうございます。いかがだったでしょうか?
年齢を理由に新しいことへの挑戦を諦めているミドル世代に響いてくれたら幸いです。
今後は、私の学習記録などを綴っていきます。
ご期待ください