スクフェス新潟に参加してきました

参加した立場

今回は実行委員(スタッフ)として参加しました。
これまでスクフェス等のイベントはオンラインのみ、しかも参加者と発表者しか経験がなかったので現地に行くスタッフは初めてでした。

参加した理由はひとえに、「主催であるじゅんぺーさんの熱意」に賛同したからだと思います。
私自身QAでもテスターでもアジャイルをやっているわけでもなく、参加当時は転職活動中(無職)だったのでじゅんぺーさんの熱意と個人的な興味で参加しました。

やっていたこと

実行委委員としては事前の定例MTGを半年ほど。
そして現地では、会場の設営・Onlineトラックの進行・自身の発表等様々なことを経験しました。
特に現地実施だったためか会場の設営に時間と手間が思いの外かかり、じゅんぺーさんはもちろんのこと会場のNINNOでお手伝いしてくださったスズキさんと霜村さんや早めに新幹線で来てくださったkobaseさんには本当にお世話になりました。

感想

初日・最終日両方を通して学んだことは沢山ありますが、現地開催に初めて参加したため「これが現地の熱量か!」と大変驚きました。
常に何かが起きており、何か起きるたびにダイレクトに反応がある。 「現地が減ってつまらない」というコロナ前からの参加者の方の嘆きがわかる気がしました。(とはいえ半分以上の時間スタッフ作業で話を聞けていないのですが…)

今回、現地とオンラインのハイブリッド開催となりオンライン側は、テストの街「葛飾」のおおひらさんと品川アジャイルの皆さんによる雑談配信が行われていたようで、後ほどスレッドをみるととても盛り上がっていたことを知りました。
現地だけでなく、オンラインも盛り上げて頂き本当に感謝しています。

さいごに

今回はじゅんぺーさん、そしてオープニングキーノートのダニエルどちらかが欠けていたら成り立たなかったんじゃないかと思うほど二人は重要な存在でした。

もちろん、スタッフ全員の誰かが欠けても大変だったと思いますが、現地のあの熱狂を生んだのは間違いなくあの二人がいたからだと思います。

スクフェス新潟に参加したおかげで私は初の現地スタッフという経験と様々な問題に取り組むことになりましたが、これは結論としては「楽しかった」と言っていいものだと思います。

毎週のようにやっていたMTGでの苦労も会場で起きた小さなトラブルたちもひっくるめて「楽しかった」が勝ちました。

おまけ

そんな私ですが、スクラムフェス新潟が縁で転職活動も終わり6月からお仕事をできる立場になりました。
製品のサポートエンジニアとしてこれまでの、システムエンジニアとカスタマーサポートの両方の経験を活かして頑張っていこうと思います。

AWS クラウドプラクティショナーの学習をはじめました(3)

実際にやってみていること

  • 試験ガイドとサンプル試験を探す
    • サンプル試験は解いてみる
  • 勉強方法を書いているブログを見つける
    • そこの方法を実践
    • skill builder(AWSの動画コンテンツ)でクラウドについて学ぶ
  • 上記をポモドーロ・テクニックを使い、25分の学習+5分の振り返りというサイクルで回して学習している

各ポモドーロの振り返り(2022/4/13)

【第1ポモドーロの振り返り】

  • プロビジョニング

    • AWSを操作する方法→API
  • プロビジョニングの方法(サービスを起動等管理する)

  • Amazon Virtual Private Cloud(VPC)

    • 論理的に分離したネットワークとしてAWSサービスを置くことが可能
    • パブリックサブネット
    • プライベートサブネット

【第2ポモドーロの振り返り】

  • 仮想プライベートクラウドVPC

    • 内側にEC2やELBを設定可能
    • サブネット
    • インターネットゲートウェイ(IGN)
      • これを通すと外部からサーバへアクセス可能
    • 仮想プライベートゲートウェイ
      • 認証を得たリクエストのみアクセス可能
    • AWS Direct Connect
  • セキュリティ

    • ネットワーク強化
      • パブリックサブネット
      • IGNとつながっているサブネット(IPアドレス
      • インターネット上からアクセス可能
    • プライベートサブネット
      • IGNとつながっていないサブネット(IPアドレス
      • サブネット側からの許可がある場合は接続可能
    • ネットワークアクセスコントロールリスト(ACL
      • サブネットへのパケット監視を行う
      • ステートレスのため毎回認証を行う
    • セキュリティグループ
      • EC2へのパケット監視を行う
      • ステートフルで、一度認証を通るともう認証はしない
  • アプリケーションセキュリティ
    • ユーザーアイデンティティ
    • 認証と認可
    • 分散型サービス妨害(DDoS)攻撃の防御
    • データの整合性
    • 暗号化

まとめ

  • 2ポモドーロ回すだけで十分な勉強時間と量が確保できることが分かってきた。
  • 一方で連続するとかなり疲れるので、2〜3ポモドーロを目安に長い休憩を入れても良いかも知れない。

AWS クラウドプラクティショナーの学習をはじめました(2)

背景

エンジニアになりたいと思っていてもプログラミング知識以前にクラウドの知識にも疎いことをふと実感したためです。

実際にやってみていること

  • 試験ガイドとサンプル試験を探す
    • サンプル試験は解いてみる
  • 勉強方法を書いているブログを見つける
    • そこの方法を実践
    • skill builder(AWSの動画コンテンツ)でクラウドについて学ぶ
  • 上記をポモドーロ・テクニックを使い、25分の学習+5分の振り返りというサイクルで回して学習している

各ポモドーロの振り返り(2022/4/12)

【第1ポモドーロの振り返り】

  • モジュール3開始

    • グローバルインフラストラクチャ
      • リージョン
        • 世界中にデータセンターを持ち、それらを高速ファイバーネットワークでつなぐ
        • リージョンは複数のデータセンターで構成されている
        • 選択要件
          • データガバナンスと法的要件の遵守(コンプライアンス
          • 利用顧客との近接性
          • 利用可能な機能
        • 料金
    • アベイラビリティゾーン
  • エッジロケーション

    • リージョンとは切り離されても、コンテンツを素早く顧客に提供できる
      • CloudFrontというCDNサービス
      • Route53というDNSサービス
      • AWS Outposts
        • 独自の建物内でAWSサービスを利用する際に使う
        • ミニリージョンのデータセンター
        • お客様の建物内で独立してAWSのサービスが利用可能
  • ポイント

    • リージョンは地理的に分離された場所にある
    • リージョンはアベイラビリティゾーンで構成されている
    • エッジロケーションでCloudFrontが実行される

まとめ

  • 今日は1ポモドーロしか回せませんでした。
  • とはいえ、それでもこれだけのノートが作れるポモドーロ振り返り、良いかもしれません。
  • 是非やってみてください。

AWS クラウドプラクティショナーの学習をはじめました(1)

背景

エンジニアになりたいと思っていてもプログラミング知識以前にクラウドの知識にも疎いことをふと実感したためです。

実際にやってみていること

  • 試験ガイドとサンプル試験を探す
    • サンプル試験は解いてみる
  • 勉強方法を書いているブログを見つける
    • そこの方法を実践
    • skill builder(AWSの動画コンテンツ)でクラウドについて学ぶ
  • 上記をポモドーロ・テクニックを使い、25分の学習+5分の振り返りというサイクルで回して学習している

各ポモドーロの振り返り(2022/4/11)

【第1ポモドーロの振り返り】

  • 試験ガイドとサンプル問題を発掘
    • サンプル試験解いた8/10
    • 全65問の試験で100〜1000点中700点で合格
  • 各分野の偏りは把握済み
    • 詳細は不明
  • 英語のオンライントレーニングがあるらしい(12h)
    • キルビルダーというらしい
    • 登録したら見れるかも→見れるので見てみる

【第2ポモドーロの振り返り】

【第3ポモドーロの振り返り】

  • EC2インスタンスの基本とそのタイプを学んだ
    • 汎用
    • コンピューティング最適
    • メモリ最適
    • ストレージ最適
  • どれも向き不向きがあって、用途別に分かれているらしい

【第4ポモドーロの振り返り】

【第5ポモドーロの振り返り】

  • Elastic Load Balancer

  • メッセージとキューイング

    • SQS
      • キューを送る・保持する・受け取るサービス
      • 自動スケーラブル -SNS
      • エンドユーザーにも通知できる
      • メッセージのチャネル(送り先)が多様
  • サーバーレス

    • インフラにアクセスできないもの
    • AWS Lambda
    • AWS Fargete
      • ECS、EKS用のコンテナ向きのサーバーレス
  • コンテナオーケストレーションサービス

    • Amazon Elastic Container Service(ECS)
      • Dockerを使う通常のコンテナをのせるもの
    • Amazon Elastic Kubarnates Service(EKS)
      • コンテナを大量にクラスタで運用するためのもの

【第6ポモドーロの振り返り】

  • 目標のモジュール2まとめテスト修了!のため中断

まとめ

  • ポモドーロ・テクニック+振り返りというやり方がすごく馴染み、集中が途切れにくい(反面相当疲れるが…)
  • AWSのskill builderの動画は日本語訳付きがあるので興味がある人は是非登録、見てみてほしい。
    • 動画での学習効率が高いのでとても頭に入る。

Rails Tutorial意図せず2週目(第7章 ユーザー登録)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第7章 ユーザー登録

前章でUserのDBとModelを作成したため、本章ではユーザーを登録していきます。その中でRailsの以下のような機能に触れていきます。

  • debugメソッド
  • Railsの3環境、開発(development)、テスト(test)、本番(Production)
  • flashメッセージでの一時的なメッセージの表示

これらに加えて本番環境のHerokuにはSSLとPuma(Webサーバ)を設定していきます。

以下1周目はスルーしていた概念やコマンドの意味を調べる

3つの環境

Railsには元来、以下の3つの環境が備わっており、それぞれが疎結合(つながっていない状態)になっています。本章でここを掘り下げるためそれを深く理解するためにそもそもどのような環境でどのような違いがあるのか調べてみました。

  • 開発(development)
  • テスト(test)
  • 本番(Production)

私の少ない経験上、これら3つの環境は開発をする際に必要なものです。
開発環境では現在開発中のアプリケーションを保持し、テスト環境ではその妥当性のテストを行い、本番環境は一般ユーザーが見ることができる環境として切り分けておきたいのです。
3環境についてしらべていたところ、「システム開発の際に用意すべき環境」というちょうどよい記事があったので、こちらを貼っておきます。

私自身こういう大きなフレームワークにふれるのは初めてなので3環境が整っていることに驚きましたが、他のフレームワークでもあるものなのでしょうか。気になります。


各環境へのアクセス方法とその際のコマンドの使い方をRails Tutorial 第7章 ユーザー登録 コラム 7.1. Railsの3つの環境から引用してきました。以下引用です。

【各環境の使い方 コマンド】

$ rails console [各環境名]

$ rails server --environment [各環境名]

$ rails db:migrate RAILS_ENV=[各環境名]

また、db:migrateは語順を変えてこういう書き方も可能なようです。

$ RAILS_ENV=[各環境名] rails db:migrate


【結論】

  • Railsにはシステム開発に必要な3つの環境がはじめから用意してある
  • 各環境へアクセスする方法も定義してあるため差分確認も可能
  • 各環境が疎結合になっていることで事故が起きにくいように感じた
form_with

本章ではユーザー登録ページを作成する際にユーザー登録フォームを作成しました。その際に利用したRailsの機能が「form_with」です。
この機能を使うと、form_withブロック配下でHTMLのフォームが作成できます。 以下の例のように、form_withブロック配下にテキストボックスやメールフォーム、パスワードフォーム等の作成が可能になります。

[例: /app/views/users/new.html.erb(一部抜粋)]


<%= form_with(model: @user, local: true) do |f| %>

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.email_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>

<%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>


詳細についてはこちらのサイトに載っていたので、参照ください。

railsdoc.com

【結論】

  • form_withはブロック内にHTMLフォームを実装可能
  • フォームの種別(タイプ)はHTMLフォームに依存1

Rails Tutorial意図せず2週目(第6章 ユーザーのモデルを作成する)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第6章 ユーザーのモデルを作成する

本章では前回作成したUsers Controllerを軸にUserに関するModelやDBを作成していきます。今後、ユーザー認証を行うための土台づくりです。
その中でDBのマイグレーションやActive Recordの使い方を学び、Railsの強力な概念を掴んでいきます。また、Model内でのバリデーション設定や正規表現などにも触れるため段々とRubyRailsの難しい部分にも触れていきます。

以下1周目はスルーしていた概念やコマンドの意味を調べる

Active Recordについて

Railsでデータベースを使ってやりとりするデフォルトのライブラリとして「Active Record」があります。これを利用してModelにデータを渡してデータベースの操作を行うことを本章で行いました。しかし、詳しい内容はわからないまま使っていたので、Railsガイドを参照して、ポイントを調べてみました。


以下、Railsガイド v7 Active Record の基礎からの引用です。

【Active Recordそのものについて】

  • Active Recordとは、MVCで言うところのM、つまりモデルに相当するものであり、ビジネスデータとビジネスロジックを表すシステムの階層です。
  • Active Recordは、データベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行なえるようにします。

【ORMとして】

  • オブジェクト/リレーショナルマッピングO/RマッピングやORMと略されることもあります)とは、アプリケーションが持つリッチなオブジェクトをリレーショナルデータベース(RDBMS)のテーブルに接続することです。
  • ORMを用いると、SQL文を直接書く代りにわずかなアクセスコードを書くだけで、アプリケーションにおけるオブジェクトの属性やリレーションシップをデータベースに保存することもデータベースから読み出すこともできるようになります。

【結論】

  • Active RecordはMVCでいうModel相当でデータとビジネスロジックを表す階層である。
  • データをやり取りするORM(オブジェクト/リレーショナルマッピング)としてSQLを直接書かなくてもDBの操作を可能にする機能です。
  • 実際に第6章で書いていてもSQLを一切書くことなくDB操作が可能で、かなり楽にUserを作成できるようになりました。
  • これはSQLを知らない初学者にとっては非常に楽に開発が可能になる機能だと感じました。以前Java等でのORMを利用したことありましたが、それに比べて簡単にデータのCRUDができるActive Recordは凄いなと感じています。

Rails Tutorial意図せず2週目(第5章 レイアウトを作成する)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第5章 レイアウトを作成する

本章では、header, footer,logo, body等をコンテンツレイアウトを切り出して別ファイルに定義することができるため、別ファイルにマークアップファイルを切り出しました。
また、今回はCSSを使ってデザイン調整を行いました。その中でBoostsrapフレームワークを利用してデザインを楽に良い形にすることができました。
そして、CSSですが、SCSSというCSSの冗長な部分を圧縮した新しい概念を利用することで楽にデザインを当てることを知りました。
最終的にはこれらのデザインや別ファイルに切り出したマークアップファイルに対して統合テストを書いてテスト実施をすることでページ間の遷移をシミュレートしてテストすることも行いました。

以下1周目はスルーしていた概念やコマンドの意味を調べる

アセットディレクト

名前の通りアセット(資産 / js,css,img等)を保持するディレクトリです。しかしながら、Railsでのアセットの保持の仕方やディレクトリについてわからなかったので調べてみました。


以下、Rails Tutorial 第5章 レイアウトを作成するから引用。

  • app/assets
    • 現在のアプリケーション固有のアセット
  • lib/assets
    • あなたの開発チームによって作成されたライブラリ用のアセット
  • vendor/assets

また、アセットパイプラインについてはRailsガイドv7にもドンピシャの記事があったので貼っておきます。

railsguides.jp

【結論】

  • アセットディレクトリは、その名前の通り資産となるjs, css, img 等を保持するディレクトリです。
  • これについてRailsガイドに1章分のサポートがある程度には重要であることがわかりました。
マニフェストファイル

どのアセットを取り込んでサポートするか指定するのに使用するのがマニフェストファイルです。しかしながら、それが何をしているのかわからなかったので調べてみました。


以下Railsガイド v7 アセットパイプライン 2.4マニフェストファイルとディレクティブ引用。

  • マニフェストファイルにはディレクティブ (directive: 命令、指示)を記述します。必要なファイルをディレクティブで指定し、それに基いて最終的に単一のCSSJavaScriptファイルがビルドされます。
  • Sprocketsはディレクティブで指定されたファイルを読み込み、必要に応じて処理を行い、連結して単一のファイルを生成し、圧縮します。
  • マニフェストファイルは必要に応じていくつでも使えます。

【結論】

  • マニフェストファイルには読み込みたいファイルを書くことでそれを圧縮して単一のファイルにすることができる。
  • マニフェストファイルは複数作成することができるため、必要に応じて複数のマニフェストファイルを作り、様々なアセットを圧縮生成することが可能。
プリプロセス

プリプロセスは名前の通り、プリ(事前)のプロセス(準備・手続き)です。しかしながら、アセットに関してどのような事前準備をしているのかわからなかったので調べてみました。


以下、Railsガイド v7 アセットパイプライン 2.5 プリプロセスから引用。

  • 適用されるプリプロセスの種類は、アセットファイルの拡張子によって決まります。
  • コントローラやscaffoldをデフォルトのgemセットで生成した場合、通常のCSSファイルが置かれる場所にSCSSファイルが生成されます。

  • アセットファイル名の拡張子は、「右から左」の順に処理されます。つまりアセットファイル名の拡張子は、これに沿って処理の必要な順序で与える必要があります。


【結論】

  • Railsにおけるプリプロセスはアセットファイルの拡張子によって種類があり、CSSの場合はSCSSファイルを生成します。

  • 拡張子を一番右から左の拡張子へ順番に読みながら、ファイル生成処理を行います。

minitestのテスト内容 Railsのテスト内容

第5章から本格的にテストを記載するようになったため、テストで確認することが増えました。しかしながら、理解が追いついていないため、わからない所を一つ一つ切り出して調べてみました。

  • assert_template

    • 調べた所、minitestの機能ではなくRailsの機能のようでした。1
    • できることは以降に設定したURLにページが存在するかを確認するものということです。
  • assert_select


以下、Railsガイドv7 Rails テスティングガイド 2.3 RailsとMinitestの出会いの引用です。

  • ArticleTestクラスはActiveSupport::TestCaseを継承することによって、テストケース(test case)を1つ定義しています。

  • これにより、ActiveSupport::TestCaseのすべてのメソッドをArticleTestで利用できます。これらのメソッドのいくつかについては後述します。

  • ActiveSupport::TestCaseのスーパークラスはMinitest::Testです


【結論】

  • minitestの機能だと思っていて書いていたテスト内容が、実はRailsのテスト機能だったということが判明しました。
  • ソースコードをよく見たらminitestを継承していないのでわかるはずだが、特に何も考えずコピペしていたら気がつかなかった可能性がありました。
  • 上記のRailsガイドをよく読むと、Railのテストで利用する「ArticleTest」は「ActiveSupport::TestCase」を継承し、その継承元は「Minitest::Test」で結局minitestの派生でRailsのテストを書いていることを改めて確認しました。

  1. minitest 公式ドキュメントを読んでみても出てこなかったのと、他のブログではRailsの機能として扱っている所からそのように理解しました。