Nuxt.jsを学習しはじめた

フロントのウェブ開発がどうしてもできるようになりたいので、一定の時間をフロント技術の学習に割いていきたいと思う。 順番が違うような気がするが、いきなりNuxt.jsから始めてみた。(Vue.jsもほんの少しは以前触ったことがある)

とりあえず写経から入るのをよくやっているので、公式ドキュメントのスタート部分をざっと読んだあと、下記をやってみた。

Nuxt.js で簡単な画像一覧アプリを作成する - Part.1 | LuftGarden https://luftgarden.work/tut-nuxt-dog-part1/

ライブラリのインストールではまる、はまる。 eslintとか、bulmaとか、cssnextとか、sass-loaderとか、いろいろ出てきてわからない。 最新版にはバグも多いので、それが原因ではまったり、ネット上の適当なページを参照して対処したらそれは古い情報だったりとか。

上記の記事自体が半年以上前のものなので、まんま書いてあるとおりやっても動かない部分があった。サーバーサイドの言語以上に進化が早い。ただなんとか動くところまでできた。 SSR(サーバーサイドレンダリング)とSPAをモードを切り替えるだけでできて、静的に出力することもできて、といったあたりがわかったようでわかってない。ただ、すごい面白いと感じた。

stelligent/mu でフルスタックなECSのCICDフローを立ち上げる

  • ECSベースでサービスを立ち上げる
  • 単にサービスを起動させるだけでなく、GitHubへのコミット〜ビルド・デプロイまで自動化したい
  • かつ、開発環境と本番環境を別で作りたい
  • 開発環境は自動でデプロイされてよいが、本番環境は手動で承認されたらデプロイされるようにしたい
  • これらの環境構築含めて自動化したい

上記のような要件ってすごく汎用的に存在すると思う。 AWSでこういったことを実現するにはCode PipelineやCloud Formationなどを組み合わせていけばよくて、そうしたサンプルや事例もたくさん存在する。 ただこれらを作ろうとすると、AWSの各マネージドサービスに関する知識がそれなりに必要で、学習曲線が急だ。

自分はDevOpsを専門領域の1つとしてやっていきたいから各サービスについても詳しく勉強していこうと思っているのだけど、それにしても数日ではできないし、けど開発はさっさと始めたいため、さくっと開発環境(およびCICD、ウェブアプリのアルファ版の公開)を立ち上げたいと思っていろいろ調べた。

stelligent muというOSSが最強ぽい。

getmu.io

なお mu はここでも使われている。このチュートリアルAWS Dev Advocateの @brentContainedの作ぽい。

Amazon ECS Workshop :: Amazon ECS Workshop

クラスメソッド社のブログ記事のまんまだけど、一通り試してみた。

stelligent mu で作成するECS Fargate用のCI/CD環境(検証環境と手動承認も付いてるよ) | DevelopersIO

この記事内のサンプルは https://github.com/stelligent/mu/tree/develop/examples/ecs-fargate ここにあるコードとほぼ同じで、GitHubのレポジトリ上には他にもたくさんのサンプルがある。

事前に必要なものは

  • GitHubレポジトリ(アプリおよび設定のコードを置く場所)
  • このGitHubレポジトリにアクセスできるGitHub Token
  • IAMアカウントの設定

となる。

コードをGitHubにPushしたらあとは、

mu pipeline up

だけでCloudFormationに各種リソースが作成され、CodePipelineが構築され、acceptance環境までアプリがデプロイされ、production環境は承認待ちのステータスになる、まで全部自動で行われたので驚いた。

  • Code Pipeline

    f:id:road288:20190207160119p:plain
    aws-codepipeline

  • Cloud Formation

    f:id:road288:20190207160450p:plain
    aws-cloud-formation

  • ECS Cluster f:id:road288:20190207160619p:plain

ここまでできれば、プロトタイプ的なアプリを作っていく上では十分なので、これでさっさと開発に入れる。コード書いてPushするだけに専念できる。

レポジトリのIssuesを見ていると、かゆいところに手が届かない(まだ機能が足りてない)部分がありそうなので、本番で使えるかはかなり慎重に調べる必要がある。ただOSSでもあるし、かなりのカスタマイズもできそうなので、ある一定のフェーズまでは大いに使えるケースがありそう。

パスワード誤入力数回でログインを一定時間ロックする仕組みの悪用について

誤ったパスワードの入力で他人のIDをロックさせチケットをゲットする技にファン衝撃【やじうまWatch】 - INTERNET Watch https://internet.watch.impress.co.jp/docs/yajiuma/1168355.html チケット申し込み時に申し込み数を減らす為こんな酷いイタズラをしている輩がいるらしい「怖い、酷い、最低」 - Togetter https://togetter.com/li/1316142

数回パスワード間違えてログインしようとすると一定時間ログインをロックする仕組みってよくありますが、これを悪用して他人のアカウントをロックしているという話。 ログインの仕組み考えるうえで考慮に入れたほうがいいかもしれない。 ログインセキュリティ周りの新しいチェックポイントになりそう。

期間指定(特に先着順)で何か申込みを受け付けるようなシステムだと考慮は必須。 アカウントID自体も固有のIDを生成したものにするか(メールアドレスとか連番とかにしない)、ロックする以外の別の仕組みを設けるか。

特に昨今だとボットやRPAが簡単に導入できるので広まってきてて、こういったいたずらを広範に仕掛けることが誰でもできるようになってきているので。 ロックしないというのも総当たりを許可してしまうことになるし、難しい。

アカウントID自体もプライバシーのあるものにする、というのがとりあえずの対処になりそう。 ただそうすると、アカウントIDを忘れてしまったユーザーに対して1ステップ面倒をかけることになるのだけど。

ホモ・デウス

デウス」は神という意味。人類が次のフェーズとして一部のホモ・デウスとその他(≒無用者階級)になっていく未来について述べている。 「サピエンス全史」も以前読んだが、それの続編となる。

人間中心主義のくだりが出てくるが、同時並行で読んでいた「君たちはどう生きるか」がまさに人間中心主義にのっとった書籍なので苦笑してしまった。人間中心主義(≒自由主義)は決して普遍の真理ではなく、人類の歴史の中で形成されてきたものだというのが印象に残った。

本というのは読む時期によって受け取り方が異なってくるものだと思っている。読む時期としては刊行からそれほど時間が経過していないのでタイムリーな時期に読んだといえるのだと思うが、数年後に読んだら印象が変わりそうだ。本書は予言書的な性格も持っているが、ここに述べられたとおりの世の中になる気もするし、論理が過激すぎる気もする。

「訳者あとがき」が全体の要約としてとてもうまくできている。

Amazon Corretto 8

Amazon Corretto 8 Now Generally Available | AWS Open Source Blog

使えた。OpenJDKの移行先としてはここで決まりか。 AWS以外でも使えるってのがポイント高い。昔、Amazon LinuxAWS以外の環境でも使いたいと思ってたなあ...

$ docker container run amazoncorretto:8 java -version
Unable to find image 'amazoncorretto:8' locally
8: Pulling from library/amazoncorretto
6c5ec16d4336: Pull complete
5bf9a6e93682: Pull complete
Digest: sha256:3c148935c874ed35c891995039f816786e0d6efa190f1391e5b562e1c575d7cd
Status: Downloaded newer image for amazoncorretto:8
openjdk version "1.8.0_202"
OpenJDK Runtime Environment Corretto-8.202.08.1 (build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM Corretto-8.202.08.1 (build 25.202-b08, mixed mode)

LeanとDevOpsの科学 テクノロジーの戦略的活用が組織変革を加速する

LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する (impress top gear)

LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する (impress top gear)

勤務先で取締役の人がおすすめしていたので手にとってみた。 エンジニア界隈では現時点ではまだそこまで話題になっている感じがしない(ソース:Twitterおよび自分の周囲)。

Martin Fowlerが冒頭に文章を寄せていて、親近感が湧いた。

全部をいったん通しで読み終えたが、内容をうまく自分の中で消化するには1日では足りない。なので本記事に少しづつ文章を足していきたいと思う。

LeanとDevOpsの科学[Accelerate] 出版記念イベント - 資料一覧 - connpass https://connpass.com/event/110420/presentation/

こんなイベントもあったのか。

この本には従来の固定観念を打ち崩す記述がいくつかある。

その1つが、「スピードと安定性は両立可能」だということ。 よくある考えとして、スピードと安定性はトレードオフであり、スピードを優先するなら安定性は犠牲になり、安定性を重要視するならスピードは出せない、というものがある。 ただ本書ではエビデンスをもとにスピードと安定性は両立可能である、とする。

本書の大枠を要約すると、ソフトウェアのデリバリ(コードを書いてコミットして、それが本番環境にデプロイされ、不具合があれば修正され再リリースされる)をいかにしたら改善できるかをデータに基づいた定量的な調査で明らかにし、そのポイントを「24個のケイパビリティ」であると結論づけている。その24個は以下のようなものだ(まえがき部分のxxページから引用)。

継続的デリバリの促進効果が高いケイパビリティ

  • バージョン管理
  • デプロイの自動化
  • 継続的インテグレーション
  • トランクベースの開発
  • テストの自動化
  • テストデータの管理
  • 情報セキュリティのシフトレフト
  • 継続的デリバリ

アーキテクチャ関連のケイパビリティ

製品・プロセス関連のケイパビリティ

  • 顧客フィードバック
  • 業務プロセスの可視化
  • 作業の細分化
  • チームによる実験

リーン思考に即した管理・監視に関わるケイパビリティ

  • 変更承認プロセス
  • 監視
  • プロアクティブな監視
  • 進行中の作業(WIP: Work in Progress)の制限
  • 作業の可視化

組織文化に関わるケイパビリティ

  • Westrum推奨の創造的な組織文化
  • 学びの支援
  • チーム間の協働
  • 職務満足度
  • 改善を推進するリーダーシップ

これを見てまず思い出した類似の概念が、the Twelve-Factor Appだ。Twelve-Factor AppはSaaSが満たすべき特性のようなものを定義したものに対して、本書の24のケイパビリティは、デリバリのプロセスをDevOpsという観点で見たときの、開発チームが持つべき能力について定義している。ただ、両者は実際に共通する概念も多いと思う。

これら24の項目はタイトルをみただけでだいたい分かるものが多く、実際に本書の中でも1つ1つを詳細に解説してはいない。本書はそれが趣旨ではなく、むしろこれらケイパビリティを満たすことが組織パフォーマンスの向上につながるという結論を導き出すまでの、リサーチ・分析手法の解説に重きをおいている。

なのでDevOps手法の説明にさかれているページ数は感覚的には半分くらいで、それ以外はそのデータの根拠を証明するための、緻密な手法と段取りの説明にさかれている。

Martin Fowler氏が冒頭で述べているように、こうした調査手法は素晴らしいし納得感もあるものの、類似の研究が他の学者でも行われて同様の結論が出てくるとより説得力が増すものになるだろう(本書の調査は2015年に行われているので、アップデートがあるかもしれない)。本書を読んだだけだと、結論ありきで恣意的に誘導されている印象を受けなくもない。ただ導き出されている結論には非常に納得感があって、実際効果もありそうだし実践するに値すると思えるのも確か。

CKAD取得した。次の目標

CKAD(Certified Kubernetes Application Developer)に受かった。

f:id:road288:20190127153249p:plain

参考まで、試験に受かるための参照したリソースが下記。

CKADをさっさと合格するためのTips - Qiita https://qiita.com/kentakozuka/items/c1a30f1545752264dfe6

CKA/CKADに合格したので比較してみた + Tips - Qiita https://qiita.com/oke-py/items/e8bf3863c8f48d750427

dgkanatsios/CKAD-exercises: A set of exercises to prepare for Certified Kubernetes Application Developer exam by Cloud Native Computing Foundation https://github.com/dgkanatsios/CKAD-exercises

twajr/ckad-prep-notes: List of resources and notes for passing the Certified Kubernetes Application Developer (CKAD) exam. https://github.com/twajr/ckad-prep-notes

kelseyhightower/kubernetes-the-hard-way: Bootstrap Kubernetes the hard way on Google Cloud Platform. No scripts. https://github.com/kelseyhightower/kubernetes-the-hard-way

Kubernetes-Certified-Administrator/README-ckad.md at master · walidshaari/Kubernetes-Certified-Administrator https://github.com/walidshaari/Kubernetes-Certified-Administrator/blob/master/README-ckad.md

Kubernetes自体は仕事でちょこちょこ使っていたが、それ以外に試験合格目的で20時間ぐらい使った。 仕事で使ったのは一部で使わない機能も多かったので、これを機にKubernetes全体を概観できたと思う。

試験自体は上記のリソースをなぞって理解すれば受かると思う。選択式とかじゃなくて、実際にLinux上でログインしてクラスタCLIで操作してリソースを作成したり修正したりする形式。 予想以上に難しくて時間がなく、全部の設問を解き終わらなかった。結果スコアは79%。66%以上で受かるらしい。上記のリンクの中に模擬試験的なものがあるが、それよりは複雑な問題が出た。

次の目標

次はAWS Solutions Architect Associate。以前持っていたが、Expireしてしまったので復活させたい。最近AWSも仕事で使うようになっているが、だいぶブランクあってわからないことが多くなっている。 試験日は2/21に設定した。

1ヶ月に1個ぐらい何かしら試験受けて資格とっていきたい。 試験あると、憂鬱だけど強制的に勉強するので、習慣化するためやっていこうと思う。お金払って、日程決めて予約したら、放置するわけにいかないので。