プログラミングいちねんせい

プログラミング歴ゼロの初心者がもがくサイトです

「さわって学ぶクラウドインフラ docker基礎からのコンテナ構築」レビュー

購入した経緯

Docker を利用しようとネットで検索していましたが、どうしても基礎の部分がないがしろになってしまい docker-compose や Dockerfile のコピペに頼っていました。そのため望んでいる Apache+PHP+MySQL ではなく Nginx+PHP+PostgreSQL の記事を意味もわからず流用したり、なぜそういう書き方をするのかという部分を知らないままコピペした結果動かないという日々が続いていました。そこで、いくつかある Docker 書籍のなかで最初に目に止まった大澤 文孝さんの「さわって学ぶクラウドインフラ docker基礎からのコンテナ構築」を注文してみました。

内容

  1. 第1章 コンテナの仕組みと利点
  2. 第2章 Docker を利用できるサーバーを作る
  3. 第3章 5分で Web サーバーを起動する
  4. 第4章 Docker の基本操作
  5. 第5章 コンテナ内のファイルと永続化
  6. 第6章 コンテナのネットワーク
  7. 第7章 複数コンテナをまとめて起動する Docker Compose
  8. 第8章 イメージを自作する
  9. 第9章 Kubernetes を用いたコンテナ運用

良かった点

  • ハンズオン形式なので吸収しやすい
  • 難易度が少しずつ上がる流れになっているので挫折することがない
  • AWS の EC2 を利用するので EC2 の知識も吸収できる

悪かった点

  • 特になし

こういう方にオススメ

  • Docker の基礎がわかっていない
  • Dockerfile や docker-compose をコピペしている
  • 詰まるたびにネットの情報を集めるが理解が深まらず体系的な学習を求めている
  • AWS を触ってみたいけどよくわからない

読了後

すぐに Dockerfile や docker-compose がスラスラ書けるということはありませんでしたが基本的な部分の理解が深まりました。読了後は積極的に試してみることで呪文のように見えていた Dockerfile や docker-compose がどう動いているのか理解できるようになり自分で環境を整えることに成功しました。

javacurry.hatenablog.jp

javacurry.hatenablog.jp

javacurry.hatenablog.jp

まとめ

第5章の「コンテナ内のファイル永続化」で ボリュームの仕組みや書き方を学べたことが大きかったです。第7章の「複数コンテナをまとめて起動する Docker Compose」では Docker-compose の書き方の基本を学べたので読了後に Apache + PHP + MySQL を構成するときの助けとなりました。まだまだ学ばなければならないことが多い Docker ですが基礎を固めるにはかなりオススメできる内容となっています。良書です。

初学者を悩ませるPHPの演算子と仲良くなろう

f:id:javacurry:20210609204939j:plain

演算子について

プログラムのなかに頻出する->, ::, =>と仲良くできていますか?私はなんとなくわかったような感覚で接していましたが、PHPMySQL を勉強していくなかで出てきたPDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONの存在が奇妙すぎて調べずにはいられなくなりました。今回は私と同じように、なんとなくわかったような感覚でいる初学者に向けて奇妙な演算子と仲良くなるための情報を一緒に紐解いていきます。読み終わる頃には、なんとなくの霧が晴れて他人のコードのなかで遭遇しても仲良くできるはずです。お菓子でも食べながらのんびりと読んでみてください。では、いきましょう。

アロー演算子->

インスタンスのメソッドやプロパティにアクセスするときに使います。

function getDb($pdo)
{
    $stmt = $pdo->query("select * from mydb");
    return $stmt;
}
function getDb($pdo)

getDb という名前の関数です。仮引数として$pdoとしています。$pdoはデータベースに接続するための方式です。ここでは$pdoにはデータベースに関する情報が詰まっていると考えといてください。

$stmt = $pdo->query("select * from mydb");

はい、ここで出てきました->です。これはインスタンスのメソッドやプロパティにアクセスするときに使います。ここでは$pdoのなかにあるqueryメソッドにアクセスしてます。queryメソッドはデータベースを表示するときに使うのでselect * from mydbと書いて「データベースmydbのなかを全部表示して」と命令してます。その情報を$stmtという変数に代入しました。ただ、それだけです。

return $stmt;

$stmtを return しています。

というわけで

->はメソッドやプロパティにアクセスするときに使うという演算子でした。さきほどの $stmtPHP のページで foreach を使って一覧表示させます。そのときも->を使うので頻繁に出てきますね。

スコープ定義演算子::

**クラスのメソッドやプロパティにアクセスするときに使います。

PDO::ATTR_ERRMODE
PDO::ATTR_DEFAULT_FETCH_MODE
PDO::ATTR_EMULATE_PREPARES

->インスタンスのメソッドやプロパティにアクセスするときに使いました。::はクラスに使います。クラス?インスタンス

クラスとインスタンスの説明

クラスは設計図と表現されることが多いです。インスタンスはクラスが具現化されたもので「さあ、あの設計図を使うぞ!」というときにインスタンスとして登場します。インスタンス化された瞬間にメモリが確保されるので、インスタンス化させるために new を繰り返すとメモリをどんどん消費しちゃうわけです。怖いですね。その設計図となる、クラスのメソッドやプロパティにアクセスする方法がスコープ演算子である::です。インスタンス化しなくても使えるわけですね。便利。

ダブルアロー演算子=>

連想配列のキーに値を紐付けるときに使います。人によっては代入するとも表現します。

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => false,

実はスコープ演算子のはなしのなかで出てきたコードには右辺もあったんです。今回、調べることになったきっかけがこのコードです。こんな書き方には初めて遭遇したので気持ち悪かったです。ここまで読んだみなさんなら簡単に理解できると思います。これって、ただPDOクラスのATTR_ERRMODEプロパティにPDOクラスのERRMODE_EXCEPTIONプロパティを紐付けてただけなんですね。連想配列なので Key がPDO::ATTR_ERRMODEValuePDO::ERRMODE_EXCEPTIONと指定しただけのはなしでした。ATTRは Attribute で属性、EXCEPTION は例外という意味です。PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONの1行で SQL のエラーが起こった場合に人間にとって読みやすいエラーを投げてくれます。

まとめ

初学者には呪文のようにしか見えませんが、1つずつ紐解けばわかりやすいですね。私自身の備忘録としての役割にも期待して書きました。

「プログラミング初学者にとって難しいと感じるところ」の対処法です

前回のあらすじ

前回「プログラミング初学者にとって難しいと感じるところ」という記事を書きました。あるあるとまでは言えないものの、初学者にとっては経験したことのある内容だったと思います。そこで今回は私なりの対処法を書きます。私自身もまだまだ初学者ですが、勉強していくなかで気づいた点や上級者からのアドバイスの記事を読んで知ったことがいくつかあるので共有できればと思います。前回の記事を読んでいない方はざっと目を通していただけるとわかりやすいです。

javacurry.hatenablog.jp

書籍を読破したものの何も作れない

まず1つ言えるのは書籍を読破しても、すぐに何か作れる人にはなれないです。ピンポイントで「じゃんけんゲームを作れるようになる本」というような内容であれば、じゃんけんゲームを作れるかもしれませんが世の中にあるプログラミング系の書籍は、そこまで狭い技術はターゲットになっていません。「1週間で覚える~」というようなタイトルも同じです。読了後はその内容をひたすら改造し、実装したいものが出てきた場合に次に必要となる技術の書籍を買うとか、調べるということが必要になってきます。ただ、読了後に何か作れる人になれるというのは初学者の夢ですよね。わかります。

周りにプログラミングに詳しい人がいない

teratail を利用しましょう。これに尽きます。「この程度の質問をしていいのだろうか?」という考えは捨てていいと思ってます。なにせ、その程度の質問しかできないレベルなのが初学者なので。ただ、質問する前に1つだけ準備しておいたほうがよいことがあります。それは質問の仕方です。

  • 何がわからないのか
  • 何を試して、どうなったのか
  • 何を知りたいのか

この3点だけは整理しておいたほうがいいです。まだ私自身も上手くできているとは言えませんが、これはプログラミングにかかわらずコミュニケーションの問題なので相手が回答しやすい質問を用意するという努力は必要だと思っています。もし満足のいく回答が得られなかった場合、それは質問の仕方がうまくない可能性も疑ったほうがいいです。どんどん試して、どんどん質問しましょう。

teratail.com

何を覚えればいいのかわからない

これは何を作りたいのかの1点にかかっています。仕様の隅々まで把握しておく必要はなく、作りたいものに必要な技術を知ればいいだけです。自在にWebサイトを作れるようになりたいという人が Python に手を出す必要はないです。作りたいものがなければ無理に学ぶ必要すらないと思っています。ちなみに、私は作りたいものがあるのと同時に「あれはなんだ!?楽しそう!」と関係ない技術にまで手を出してしまう気質なので勉強の効率が非常に悪いです。

何がわかっていないのかわからない

これは上記の何を作りたいのかが明確になれば自ずと必要な技術が見えてくるので、そこで足りていない知識や技術がわかるはずです。

プログラムをどこに書けばいいのかわからない

これは私自身、未だにわかっていないことがあります。対処法と見栄を切ったものの勉強中です。ただ、1つわかってきたのはプログラムは必要なタイミングで実行してくれればいいので学習動画サイトや書籍と全く同じである必要はないと思っています。動かなければ、そこで「ああ、順番のせいかもしれない」と考えられますし、問題の切り分けにもなります。

文字列かどうかの使い分け

これは目下、格闘中です。PHP のシングルクォーテーションと$をつけなければいけないところで、つけていない。またはその逆。このパターンで毎日エラーを叩き出していますが、もはや慣れるしかないと思っています。エラーが出ても死ぬわけではないので、一緒にエラーを出しまくりましょう!

調べ方がわからない

初学者にとっては公式リファレンスは呪文にしか見えませんよね。最近、私はわからなくてもリファレンスを読みにいきます。とりあえず慣れるしかないです。あわせてWebの記事も読みリファレンスを読み解こうと必死になっています。最初に比べると少しずつ読めるようになってきましたが、まだまだ頼れる存在というには程遠いです。早く友達になりたいなー。

英語がわからない

エラーは英語で表示されます。逃げられません。私は英語学習にも興味があるので思い切って身の回りをできる限り英語にする作戦を始めました。

  • Windows を英語モードにする
  • 普段利用するサイトの Amazon 等, 普段遊ぶゲームや IDE を英語モードにする
  • 英語の学習も並行する
  • エラーを英語で検索する

いろいろ工夫してます。今となっては英語アレルギーは消えました。普段から英語で検索する癖がついたのでエラーが長文で表示されてもきちんと読みます。英語の理解力とは別の問題ですが、とりあえず慣れましょう。圧倒的にオススメの書籍はDUO 3.0です。5周くらいしたところで確実に語彙数が上がったのを感じました。音声付きだと1時間で1周できます。

モチベーションの維持

私は Notion に1週間のタスクと1ヶ月のカレンダー表示を Weekly Agenda という名前で管理しています。はい。英語の勉強の時間を作れてないことがバレましたね。

f:id:javacurry:20210605012114j:plain
Weekly Agenda

カレンダー部分はクリックするとページが開き勉強した内容が表示されます。

f:id:javacurry:20210605012451j:plain
Weekly Agenda 2

勉強した内容を振り返られるだけではなく、1ヶ月でどれだけ勉強したのかという点も確認できます。あと Twitterブログを利用してアウトプットするのも手ですね。なんとなく勉強していると、なんとなくやっていない期間も出てくるので自分で管理すると戒めになります。これでモチベーションを維持できています。あと、有名なはなしですが勉強するのが億劫な方はとりあえず3分だけやるという方法も良いです。3分でやれれば10分やれますし、気がついたら1時間経っていたなんてこともザラにあります。有名な勉強法の1つですね。

まとめ

もし同じ初学者の方が読んでいたら、ぜひ Twitter をフォローしてください。ほぼ毎日、エラーに悩まされながら叫んでます。ぜひ一緒に頑張りましょう。そして、初学者より上の方が読んでいたら、ぜひフォローしてください。そしてアドバイスください。慰めてください。