WEBに関する、プログラムの覚え書きブログ。Comments自分は、MacOSで、Laradockを使って開発環境を構築している。その際に、ホストマシンの更新内容がコンテナ内に反映されず、悩まされた。自分のようにハマったような例もあまりみかけず。一応動作することが確認したので、その経緯・設定を書き残しておきます。`:nocopy`APP_CODE_CONTAINER_FLAG=:cached次のようにいずれの設定に切り替えたとしても、状況は改善されなかった。APP_CODE_CONTAINER_FLAG=:delegatedAPP_CODE_CONTAINER_FLAG=:nocopy最終的には、設定を解除すると正常に動作するようになった。APP_CODE_CONTAINER_FLAG=なお、ぐぐってみると、同期が遅い。いうケースはあるようで、その場合はdocker-syncを使いrsyncの仕組みで同期すると早いとあります。公式ドキュメントによると、docker-composeコマンドを使うのではなく、「laradock/sync.sh」コマンドにて起動するとdocker-syncが起動すると書かれています。sync.shも、難しいことがかかれているわけではないので、見てみるとよいですが「laradock/sync.sh」、次のような処理になっています。stop起動前にはdocker-syncを開始して、終了時にはdocker-syncを止めると、それだけですね。stop」している点。downだと、コンテナまで削除してくれるけど、stopだとサービスを停止するだけで、コンテナはのこったままになる。stopしているよう。containersうーーん、意図がわからない。リファレンス本にもLaradockの事は触れられています。詳細にまでは触れられていないですね。未分類Interventionで日本語表示対策。Comments表題のとおり。Interventionで日本語などのマルチバイト画像文字を表示しようとする際に、日本語だと、エラーが出る場合がある。imagesに表示される<none>を消す。images」を実行し、これまでに作成したDockerイメージの一覧を見て確認している。その際に表示される、<none>のdockerイメージは削除してよいのか?noneイメージってなんなのか?という話。.」と、何回もbuild繰り返しやり直していると次のように、<none>のdockerイメージがそのビルド回数分作成されてしまう。Commentsこの記事はソフトウェアエンジニア向けにローカルでDockerで開発環境を作る際の、基礎知識のうち自分用にまとめたものです。日常的にdockerを使うようになったものの、何回もDockerの記事をみては忘れて、見てはわすれてを繰り返すので。本番環境などでの利用、クラウドでの利用などについては本記事で触れません。ネットの記事や、オライリー本やいくつかのDocker関連書籍をみましたけど、ダントツでわかりやすかった入門者向けのおすすめの書籍を紹介しておきます。どの書籍でも、セキュリティやk8sなどまで触れられてますね。Engineを使うということ。Engineのおかげ。注意としては、コンテナからホストOSのカーネルを使うということなので、コンテナに展開されるOSとホストのOSとは、本来同じといけない。(Docker上で、Linuxのコンテナを動かしたい場合は、ホストマシンはそのLinuxのOSである必要がある。)特定のLinuxのOSの機能を使おうとしても、Windowsや、MacなどOSが異なれば動作しない。逆も然り、ホストマシンのOSがLinuxベースの場合、WindowsのDockerイメージを動かすことはできない。MacなどでDockerを使う場合は、VirtualBoxなどでまずLinuxの仮想環境を用意し、そのOSに沿ったDockerイメージ/コンテナを展開といけないという話であるけども、わざわざVirtualBoxなどで仮想環境を作るのが面倒。macなどのインストーラーが提供されている。これらインストールすると、Dockerを起動するための様々なツールがインストールされる。Machineによって、ユーザは仮想環境について意識せずとも、自動的にLinuxの仮想環境を構築され、ホストOSがMacであれWindowsであれ、LinuxベースのDockerコンテナを立ち上げることができるようになる。ホストOSがMacでWindowsのコンテナを作成することはできないホストOSがWindowsでMacのコンテナを作成することはできない。ホストOSがLinuxで、WindowsやMacのコンテナを作成することはできない。Dockerfileとその記述についてDockerはコンテナを作成するために、その雛形となるDockerImageを用意する必要がある。Dockerfileは、そのDockerイメージを作成するための設定をまとめたファイル。ファイル名は「Dockerfile」とするのが慣習的であるが(DockerImageを作成する際デフォルトで読み込んでくれるファイル名が「Dockerfile」)、設定ファイル名を指定することも可能。実際の運用上では、開発環境と本番環境とをわけるように「Dockerfile.development」「Dockerfile.production」のように、環境に応じていDockerfileが複数用意されるケースもみられる。Dockerfileは1行1レイヤーとなりDockerイメージに積み重なっていくため、行数は可能な限り少なく抑えるほうが良い。以下に、Dockerfileの命令文をいくつか乗せる。(<イメージ>:<タグ(バージョンなど)>)ベースとなるDockerイメージを読み込む。DockerHubで公開されているものを使うことがほとんど。Google検索で、構築したい環境のDockerfileについて検索すると大抵すぐみつかる。今回、例としてGo言語の開発環境を作りたかったとして、GolangのDockerHubを見てみる。Tagsという所がタグなのであるが、非常に多く、どのバージョンを利用すべきか迷う。そのページの下部の方に、説明が書かれているが、次のように性質が異なる。最小限の構成のようなもの。最新のdevianパッケージの構成らしい。さまざまなDockerfileなどをみていくと、その他に、`Buster、Stretch、Jessie`なども見かけるあるが、Debianのバージョンのコードネームのようだ。get」したかったので、gitが必要があったのだけど、容量を少なくおさえたいからといって、alpineのディストリビューションを利用すると、gitコマンドが使えない。alpineを使い、gitコマンドを使いたければ、gitをapt-getでインストールしないといけない。約700MB自分は少しでも容量を小さくしたいので、alpine+gitインストールして使っている。scratch」とすると、Dockerを利用するにあたり、最も最小の構成から、環境を構築することも可能。イメージサイズは極小である。WORKDIRコンテナ上でのワーキングディレクトリ。<コンテナディレクトリ>ホストマシン上の特定のディレクトリを、Dockerコンテナ内の特定のディレクトリにコピーする。.」とすると、現状のディレクトリ内を、上記で指定したWORKDIRにコピーする。COPYににたADDというコマンドの場合は、コピーしたファイルのなかに.tarが含まれる場合はtarボールが解答される。CMDコンテナを立ち上げた際に、デフォルトで実行するコマンド。[“./sample_app”]とするとWORKDIR内に配置されているsample_appを実行する。デフォルトに実行するコマンドなので、コンテナ起動時にコマンドを実行すると、コンテナ起動時のコマンドが優先されるので注意。RUNコンテナで実行したいコマンドをRUNの後に記述する。getをする例は次の通り。github.com/xxxx/xxxxxその他その他にも「ENTRYPOINT」や「ENV」などがあるが、今回は除外。まとめ以上がDockerfileについてのメモ。今後Dockerについて触れていきたい内容として、コマンドの最低限のまとめ、docker-composeマルチステージなどで、Dockerイメージの容量を圧縮する方法や、それに関しては後日記述してみたいと思う。Commentsイベントって何かと便利だから、共通処理をイベント使って書きたくなります。リダイレクト処理もそうしたい。リスナ書いてみるも、できなかったので、解決策を書き残しておきます。MiddlewareかControllerに。Eventはバックグラウンドタスクとしてコールされるので、リダイレクト処理描いても無駄だよって。eventだから、ログイン後に特殊なリダイレクトのロジックを挟みたいときは、コントローラのログイン処理の後でリダイレクトのロジックを挟むか、ミドルウェアにリダイレクトのロジックを記述のいずれかにしましょう。イベントリストイベントのリストはこちらにまとまってる。?概ね、次のようなところにあるよう。AuthCacheConsoleコマンドDatabaseのトランザクションLogMailNotificationQueueRedisリファレンス本にもイベントのこと書いてたような気がするので、後でチェックする。Pixabay一つのクラスに対して、何かしらの機能を追加したい場合、継承する方法を単純に思いつきますが、SwiftにProtocolとDelegateという考え方がありましたので、PHPに置き換えてみたいと思います。Protocolはhttpとかhttpsとかそういった話ではなく、単に「ルール」といった意味あいのもので、PHPのinterface、LaravelなどのframeworkではContractと言われてているやつです。Delegateは、直訳だと委譲とか。Delegateという単語を見ると身構えてしまいますが、Interfaceを意識したプログラミングしてると、知らずのうちに似たような事をしているというケースは結構ありそうです。SwiftLaravelの認証/認可。Commentsアドベントカレンダーに触発されて、記事を書いたところ、ちょうど枠に空きが出たので、投稿したいと思います。Laravelのドキュメントって結構分かりやすく書かれている方だと自分は思っているんですけど、今日はその中でもこんがらがりがちな「認証と認可」について今一度、整理したいと思います。いうケースに使えるのかとか。make:authしたら概ね完成しちゃいますが、認可って便利なので、認可の説明が多いです。実世界に置き換えて考える技術的な話に入る前に、日本語の「認証と認可」を理解します。いうのも、「認証と認可」という日本語もわからないし、英語の「Authentication、Authorization」もわからないので。言語って難しいですね。DevelopersIO」という素晴らしい記事がありました、ここを読めば、理解できます。一部、抜粋させていただきます。認証:通信の相手が誰(何)であるかを確認すること。(例:マイナンバーカード)認可:とある特定の条件に対して、リソースアクセスの権限を与えること。(例:チケット/切符の発行)切符を買った人は電車に乗るということを許可されますけど、それが誰だって構わない。切符さえ持っていれば、誰だって乗れると。後述していますが今回、認可の実例として、運転免許を例にしています。「運転免許証」を持つこと自体は、あなたが誰かを確認できるものになるから「認証」を意味しますけど、「運転」という行為は、免許証持っていても飲酒してたらしてはいけませんよね。一つ別の例としては、教習所で試験に合格すれば、運転免許証を発行されますが、交通違反を取り締まっている警察官は、免許の点数を操作することはできますが、免許証を発行処理はできないです。この辺が認可されていたり・されなかったりの話です。なんとなく理解できたのではないかということで、いよいよLaravelについての話に移ります。Laravelでは、認証が「Guard」、認可が「Gate/Policy」の3パターンありますので、順にそれぞれ触れていきます。Comments8時間費やした。他の人がはまらないように、記載しておきます。upgrade」してください。的なメッセージが出てきたので、何気なく、それに従っただけ。upgrade」していなかったからかよくわからないけど、まさかのPHPが動かなくなった。エラー内容と原因このようなメッセージ。global」を指定していたやつだし、もともとYarnのアップデートのためにやったものだから、PHPに影響が行くとは全く思っていなかった。Commentscssを書くとき、sass/scssを書きたくなる。javascriptを書くとき、babelを使う必要が出てくる。そんな時、おそらくGulpかWebpack、を使うことを強いられる。Mixを使うとすごく便利。MixというWebpackのラッパーを使って楽している。Reactでも、Vueでも、BabelでもSassでも、PostCSSでも思いつくことは基本的にできる。Webpackって、設定ファイルを書くのが面倒。Webpackの設定ファイルはカオスになる。それをうまい事隠してくれる。(Gulpだけで良い時もあるので、適材適所)本記事ではこれらを比較して見た記事。ENTRYREADME.mdファイル。マークダウン記法まとめ一石三鳥!?SublimeText2とsass/SCSS(compass)+SFTP(FTP)で作業効率化する方法。3つの簡単便利Javascriptテンプレートエンジン。2とCtagsの組み合わせがすごい。2012へ行ってきた、まとめ[CMS]多言語化、翻訳ファイル.po、.mo。パララックスでのイベントの考察。mousewheelCodaとZen-Codingのショートカットまとめ。[Drupal7]既に設定済みのFIELDTYPEをintegerからtextへ変更。ENTRYLaradockでホストマシンの変更が反映されない場合の対策Interventionで日本語表示対策。imagesに表示される<none>を消す。