20210411_アウトプット(Ruby、Rails、php)

アウトプット画像

先週やっていたこと

  • 4/5:Rubyモジュールの続き

  • 4/6:SPI/Rails🌸@task = Task.newを見た時にここでクラスを生成しているのか!とRubyで学んだことが繋がった。

  • 4/7:PHP🌸パーフェクトPHPの49ページまで

  • 4/8:PHP/志望動機🌸パーフェクトPHPの63ページまで

  • 4/9:Rails/志望動機🌸Slimのビューの場合、表示される場合はイコールを、させたくない時はハイフンで行を始める。

  • 4/10:PHP🌸初めてのPHPの8ページまで/プログラミングアカデミー(おさないさん)のYoutube/phpconfuk2016 PHP7で堅牢なコードを書く(和田卓人さん)の動画をみた

  • 4/11:PHP🌸MAMPの導入/プログラミングアカデミー(おさないさん)のYoutube/ブログによるアウトプット


1%の成長

  • phpのことを楽しみながら学び始めた。
  • Rubyのことをしっかりやった部分がphpを学ぶうえでも差分がわかりやすいことを実感した。


新しい発見

RubyRails

  • rails s -p 3001-pオブションでポート番号を指定することが出来ること。

  • stringやtextという型はリレーショナルデータベースが用意しているデータ型そのものではなく、Railsがリレーショナルデータベース毎の際を吸収した抽象的な型として用意している概念であると知らなかった。Railsが用意している型が実際に使うリレーショナルデータベースのデータ型にマッピング(関連づけ)される💡

PHP

パーフェクトPHPから学んだこと

  • Zend Engine(ゼンドエンジン)って何?:機械語へと解析・実行するためのエンジン。
  • php.ini(イニ)って何?:phpを動かすためのプログラムの設定ファイル。(ここにこういう部品が入っているからね、エラーが起きたらこうして!等が書いてある)
  • phpは「人間が作ったphpの文字が書いてあるコード」「実際に動かすためのコード」「動け!という命令」によって、成り立つと理解。
  • もう少し具体的にいうと、

(1)PHPプログラムがある。
(2)レキサーで、トークンと呼ばれる”ネットワーク上でデータを送信できる権利機能が入った特殊なデータ”となるようバラバラにする。
(3)パーサーでコンピュータが直接実行できる形に近くした”オペコード”と呼ばれる中間コードへ変換する
(4)実行マシンで実行!

  • モジュールとは、Webサーバの機能の一部として実行すること。その一つがApache
  • var_dump関数とは?:使われている型が何かわかる関数。デバッグに使える。
  • 大きく3つのエラーがある。(ざっくりレベル)
エラー 簡単な内容
パースエラー等 シンタックスエラー。オペコードに変換できないからファイルを読み込まないよ!
Fatal Error(フェータルエラー)等 致命的なエラー。メモリが足りてない、定義されてない関数を呼び出そうとしている等
WarningやNotice等 実行は継続するが警告
  • error_reporting()関数によって、出力するエラーレベルを設定できる。
  • ini_set()関数によって、実行時の設定をできる。
  • display_errorsはエラーを表示するか否か設定できる。
  • ini_set('display_errors', 'On';)というように、ini_set()関数display_errorsを組み合わせて使える。

  • isset()関数によって、変数にセットされているかチェックできる。(trueかfalseで値を返す)

  • phpにおけるスコープの概念は、phpブロック内→グローバル変数、関数・メソッド・クラス内→ローカル変数(外に出したい時はglobalつける)
  • phpの変数には「変更不可能な変数はない」ため、うっかり定数を変更しないように注意!
  • マジック定数とは「今いる〇〇」を表現できる定数のこと。(今のフルパスはここだよ__FILE__、今のpwdはこれだよ__DIR__など)

  • エラーの重要度

重要度 エラー名 内容
高い E_PARSE シンタックスエラー(ファイルが実行されることなく終了)
E_ERROR 致命的なエラー(エラーが発生した時点で終了)
E_WARNING 実行時の警告(警告が発生しても実行は継続するが直して!実行した結果、処理進めないことも。)
E_NOTICE 実行時の警告(警告を発生しつつも自動的に対処を施す)
E_DEPRECATED 非推奨(実際に廃止されるまでは動くけど直そうね)
低い E_STRICT 厳格(変更した方が望ましい記述。コンパイル時に発生することも多い。)
  • ユーザーエラー(開発者が自分で作れるエラー)
  • エラーに関する設定は、開発環境では全てのエラー、本番環境では厳格と非推奨以外を表示させるなど、開発環境によって設定するといい。
  • キャストとは型変換。
  • スカラー型とは、phpにおけるよく使う型たちのこと。論理値(boolean)、整数(integer)、浮動小数点数 (float, double)、文字列 (string)の4つを指す。
  • ヒアドキュメントとは、文字列(ベタ文字)をソースコード内に埋め込むための手法の一つ。

brewによる導入

  • brewPHPの導入を行ったが、その後、XMAPPかMAMPで導入した方がデータベースとの連携の環境構築が楽なことを学んだ。
~ % brew search php
~ % brew install php@7.4 
~ % brew reinstall git-secrets

PHPの基礎

🤔私:PHPで出来ることは?
🥸先生:PHPの機能を使って自動的に更新する日時などを作成し(HTMLに変換したものを)ブラウザに表示させたり、(PHPは覚えることが苦手だから)覚えることはデータベースにお願いして、データベースから必要な情報を持ってきて調整・表示するよ。

環境構築

🤔私:PHPを導入するにはにあたり環境構築をするけれど、そもそも「環境構築」とはどういう意味?
🥸先生:コンピュータが理解できる機械語に変換するために、必要な諸々のファイルを自分のコンピュータへインストールして、その場所をコンピュータへ知らせて、開発できる環境を整えることだよ。
🤔私:PHPの環境開発を整えるには、どんなものが必要なの?
🥸先生:Webサーバー用のソフトウェアと、アプリケーションサーバー用のソフトウェアと、データーベース用のソフトウェアの3点セットが必要だよ。それぞれインストールするのは大変だからphpにはおまとめセットがあるんだ。

おまとめセット名 内容 備考
XMAPP(ザンプ) ApacheMariaDBPHPPerl 最初のXはクロスプラットフォームWindowsMacOSなど異なるプラットフォームでもOKだよという意味)
MAMP(マンプ) ApacheMySQLPHP 最初のMはMacintoshマッキントッシュというApple社が最初に開発したパソコン。最初はMac専用に作られた。)

アプリケーションサーバー用のソフトウェアはどこ?と思ったが、Apacheが兼ねてくれていることを初めて知った。(↓参考になったサイト)

www.sejuku.net

🤔私:そもそもサーバーってなに?
🥸先生:サーバーとは、いつ何時にアクセスしても大丈夫なように待機するコンピュータのことを指すよ。例えばGoogleで検索したいと思った時にいつでも検索できるのはサーバーというリクエストを待っていてくれる存在がいるからなんだ。

🥸先生:Webサーバー用のソフトウェアは、いつでもアクセスした時にブラウザが読める言語(HTML・CSSJavaScriptなど)状態に変換するものあり、アプリケーションサーバー用のソフトウェアはいつでもアクセスした時にデータベースとやりとりをするものだよ。

実際にMAMPをインストール

MAMPにした。以下を参考にしながらインストール。(↓)

qiita.com

  • /Applications/MAMP/htdocs配下にあるファイルがhttp://localhost/上に表示されると理解。

  • /Applications/MAMP/conf/php7.4.12/php.inidate.timezoneを東京に設定。

和田卓人さんの動画を見た

youtu.be

  • 予防に勝る防御なし:そもそも、誤りが発生しないようなプログラミングスタイルを。
  • fail fast:障害を抱えて中途半端に動いているプログラムよりも死んだプログラムの方がダメージは少ない。
  • バグと例外を区別しさらに誰の責任かも見分けられるようにする。

(補足)

  • ここでいう契約とは?あなたが事前条件を満たした状態で呼ぶと約束するなら、お返しに事後条件を満たす状態で最終的に実現することをお約束するということ。
  • 失敗がバグなのか例外なのか切り分けて見極めて。(コード自体に誤りがあって)必ず失敗するものがバグ。(外部要因によって)たまに失敗するものが例外。さらに誰の責任かも見分けられるようにする。
  • 事前条件違反は呼び出し側にバグが証拠である。事後条件違反は供給者側にバグがある証拠である。


賢明なソフトウェアになるための第一歩は、動くプログラムを書くことと正しいプログラムを適切に作成することの違いを認識すること。


  • 心に残った言葉「正しいプログラムとは、要求された以上のことも、それ以下のことも行わない」
  • なぜ見ようと思ったか?:仕組みを作る上で堅牢なコードをかきたいため。phpについて始めたばかりで詳しい技術の部分はわからないかもしれないが、尊敬する人がどういう視点でエラーや関数などを定義して、設計しているのかを知りたかった。その視点の部分を感じながら、今後のphpの勉強を進めたら「ここはあの時に言っていた必要な知識だ!!」と知識の必要性を身近に感じられると思ったため。
  • 具体的に「この知識重点的に学びたい」と感じた部分は、
    (1)プログラムにおいて型がめちゃくちゃ大事であること(誤っているとバグの温床になる)→型宣言や、どのように型を定義するのかを理解しようと思った。
    (2)誤りが判明した時点でストップする仕組みの方が(気付くのが早ければ早いほど)傷は浅くなること→食い違っていることをすぐに気付けるエラーの出し方はどうやるんだろう。ちょろっと学んだエラーファイルの出し方が活きて来るのかな?システムをストップさせるわけにも行かないだろうし、開発環境と本番環境で、設定する方法や知識をもっと学びたい。
    (3)お互いを信頼して定義したり呼び出す方法→変数や関数に定義するとき、処理を呼び出したりするとき、どこまでの責任をどの部分に持たせるのか知りたいな。これは経験がものをいうのかもしれないけれど、ただ定義するだけでなくて、どういう影響を全体に及ぼすかも考えながら学びたい。
  • 心に残った言葉「正しいプログラムとは、要求された以上のことも、それ以下のことも行わない」→気を回してやらないことも大事だし、もちろん満たしていないものもだめ。ピタッと必要なプログラムだけを書けるようになるためには全体の構造を理解していて、その上でその部分に適した必要な部分のコードの輪郭をはっきりさせる鍛錬を常日頃しているからこそかけると感じた。この考え方、素晴らしいなあ。目指す一つの思考になった。


感想

  • 先週の反省として「全部頑張ろう」と思ってしまった。
  • アウトプットも時間がないから、戦略を変えてブログではなくペラペラ独り言で誰かに説明するように話したり、本に書き込むアウトプット方法を試していたが、心のどこかで「ブログせっかく今まで更新してたのにな」と思っていたりもした。
  • 土曜日は久しぶりに実家のポメ🐶に会えた。プログラミング以外の息抜きをしたのは12月17日以来だった。それまで会社以外の時間は、毎日ただひたすら勉強してた。
  • 実家に帰った時に「本当は家族に会いたかった」気持ちが溢れてきて、泣けてきた(笑)頑張りすぎていたのかもしれない。
  • 仕組みを作れるようになりたい。そのためにはエンジニアになりたい。エンジニアになってからが本番だけれどもまずは就職したい。と張り詰めすぎてたのかもしれない。
  • リフレッシュしたおかげでまた前向きな気持ちになれた。
  • phpも、楽しい。Rubyの環境構築の時、訳もわからずインストールしていたが、「ApacheがWebサーバーとアプリケーションサーバーの役割を担ってくれているおかげでブラウザに反映されるのか」とか2つ目の言語を学び始めたことによって「暗黙の型変換という概念があり、言語によって型変換の強制具合違うんだ」とか、新しい学びがあって本当に楽しい。
  • 新しい技術を覚えようとするとき、遠回りかもしれないけど、本や動画ネットなど様々な媒体で多角的に見る方法が好き。本の言葉だけで理解していたものが、他の媒体で見るとどこが重要とか、本質の捉え方違ったとか気付けるため。時間はかかるかもしれないが、色んな媒体で調べた知識は結構、その後の記憶に残っている気がする。
  • 楽しむところだけ抜き取って、プレッシャーとか焦りとか感じないで集中するのが自分は苦手だと気づけた。できる方法を模索しよう。マルチタスクが苦手な自分を受け入れよう。シングルタスクで切り替え上手な力を身につけたい。