自転車とプログラミング

自転車メーカーに勤める会社員がプログラミングを学ぶ中で感じたことを書きます。最近サービス作りました。

我流Scrumerが「NIFTY Tech Talk スクラムマスターによるチーム改善LT! ニフティのスクラムトーク vol 2」に参加してみた

こんにちは、渡邊です

ニフティさんが開催されているNIFTY Tech Talkにまたまた参加してきました。 今回は「スクラムマスターによるチーム改善LT! ニフティスクラムトーク vol 2」」ということで、スクラムをやってみたところのお話を聞くことができました。

ニフティさんは10〜20ほどのチームをスクラム開発で稼働させているそうで、始めたのは5年ほど前とのことですがかなりノウハウが溜まっているような印象でした。

対して、私の方は5名弱の非エンジニア部署にスクラムを取り入れた運用方法を導入しています。 もともとはフィヨルドブートキャンプでアジャイルスクラムを学んで、チーム開発で実践した経験もあり、チームのタスク管理や目標達成と負荷の定量測定にうってつけだと思って自分の職場でもスタートしてみました。

とはいえ、スクールか職場のやり方しか知らないのでプロフェッショナルな運用や課題を学ぼうと参加してきました。

↓イベントの概要はこちらです。 engineering.nifty.co.jp

↓動画はこちら www.youtube.com

「チーム力を高めるスクラム実践法:カンバン公開と課題攻略について」

ベロシティの稼働率を想定する、というのは定量的に見ていなかったなーという部分。 前週の実績と今週の想定稼働率を出すことで、おおよその実績ポイントを求められるようになる。想定実績ポイントが求められるようになるとそこを下回った、上回ったでまた稼働の分析が取れるので良いやり方だと思う。 とはいえ、現職でやってると実績ポイントには波がめちゃくちゃあるのでここを有用なデータにするのは難しい気もする。

レトロスペクティブでしっかりチームの課題を振り返って議論していた。ここがなかなかできずにおざなりになってしまうことが多いんですよね。スプリントレビューとレトロスペクティブで長時間になるのでここまで行き着かないことが多いです(汗)

スクラムチームと認知負荷」

こちらのLTは難しかったです…!

とはいえ、私でも分かる部分はちょこちょこありました。 教科書通りのスクラム組織をできていますか?という疑問提起と、多くはビジネス組織が根底にあってのスクラム組織なので教科書通りの構成ではなかなかできていないって話があって、たしかに私の組織でもプロダクト(ブランド)を8つくらい担当しているからブランドごとに優先順位も異なるのでまったく教科書通りにはなっていないですね。

同様に現代的な開発スタイル(アジャイル / リーン / DevOps)は従来のビジネス組織に根ざした設計になってないので、調整が必要。 でもその調整というのはトップダウンにビジネス組織やフローを変えられたらいいけど、なかなかできない。

そこでチームトポロジーが重視していることの一つが「認知負荷の制限」。短いスパンでデプロイするスタイルを維持するには認知負荷がかかる事象が多くあるとそれだけ開発効率が落ちてしまうということ。 そういうわけで、チームメンバーへの認知負荷を調整することでボトムアップスクラムチームを稼働していくように改善していく…的なお話でした。

難しい内容でしたが、振り返ってみると腹落ちできました👍

参考

おわりに

認知負荷…というよりもチームメンバーの手間を減らす組織運営と考えると一般化できてちょっとわかりやすいかな、と思いました。それであれば私もボトムアップで職場に提案していたりしてましたね。うまくいきませんでしたが(´;ω;`)

チームトポロジーは面白いですね。そのうち書籍も読みたいところです。

NIFTY Developers「超入門 ここから始める開発環境」に参加しました

こんにちは、Watanabeです。

ニフティ株式会社さんが主催する勉強会「超入門 ここから始める開発環境」に参加しました!

「超入門」とタイトルに書かれてるくらいだったので、意を決して初めてオフライン枠で勉強会に参加してみたのですが、内容は追いついていけましたし、フレンドリーな雰囲気があったのでとても良かったです。

会場の様子(もっと全体を写せばよかった)

以下、LTごとの感想です。

メモを見つつ感想を書いていますが、実際のところはYouTubeで公開されているのでご覧になるのがおすすめです。

dotfilesをつくるよ

dotfilesに関してはひまじんプログラマーの週末エンジニアリングレッス‪ン‬で紹介されていたり、2月のLT会でフィヨルドブートキャンプのメンターのokuramasafumiさんからdotfilesとして管理されている.vimrcを見せてもらって深い世界の一端を感じていた状況でした。

今回のLTでは環境構築がテーマに据えられているだけあって、設定ファイルを管理することで環境上のトラブルを回避したりスピーディに解決する効果があるっていうのを冒頭で言ってもらえてdotfilesとして設定ファイルを管理する理由が腹落ちしました。

業務の下支えとしてこういう部分に詳しくなるのも大事ですよね。

フロントエンドを始める、その前に ~どうしていっぱいツールがあるの?~

TypeScript→JavaScriptを例に取ったビルドの工程解説。

余談ですが、TS→JSじゃないけどRailsの環境構築するときにむちゃくちゃ苦戦したことを個人的に思い出しました。 Rails7はimportmap-railsでバンドル不要になるけど、CSSはバンドルされるとか…この辺由来のエラーにも悩まされました…。 トランスパイル、ポリフィル、バンドル、ミニファイとビルドの各工程を必死に調べたな〜とLT聞きながら懐かしくなったりしてました。

基本的にフレームワーク側で用意されたタスクランナーがビルドをするわけですが、細かい設定が必要なときにタスクランナーにも触れるようで「細かい設定」が何を指すのかは質疑応答で聞いてみました。 このあたりは古いブラウザへの対応が必要な場合を指すとのことでした。

VisualStudio Code Dev Containersのススメ Python

Python編とありましたが、VSCodeとDockerを使って目的ごとに開発環境を作れると環境構築コストが下がって開発や学習がしやすくなりますよ、といったお話でした。

Dev Containersは初めて知りましたが、VSCode拡張機能でローカルPCで立ち上げたコンテナにVSCodeを接続してコーディングできるようになるもので、これによって目的ごとに開発環境を立ち上げることができるようになるとのことです。

rbenvでRubyのバージョン管理をしていたので目からウロコの話が多かったLTでした。 PCの買い替えを検討していたのですが、DevContainersを使えば競合の心配もいらなくなりそうですね。

あと、この仕組みを導入したことで新人の環境構築に1日かかっていたところ10分で完了するようになったとのことで、これはすごすぎませんかね。具体例が出てくると俄然触ってみたくなります。

おわりに

「超入門」のとおり全体的にとっつきやすい話でとてもリラックスしてLTを聞くことができました。 全体的に目的意識を持って技術を使った話が多くて楽しめました🙌

ニフティさんありがとうございました!

【MAAKS】スポット投稿画面を修正しました【リリースノート】

こんにちは、Watanabeです。

私が運営している、サイクリングの事故情報を共有するサービス「MAAKS」の機能修正を行いました。

maaks.jp

リリースノート

ユーザーフィードバックをもとに利便性を向上させる修正をおこないました。

リリース日

2024年3月9日

内容

スポット投稿フォームにおける、必須項目の削減や表現の修正をおこない、スポットを投稿しやすくなりました。

ビフォー

アフター

「徳丸さんが指南 Webアプリケーション開発に潜むリスクのケーススタディ」に参加しました

こんにちは、Watanabeです。

WEBセキュリティ界隈の著名人である徳丸さんがセミナーをされるということで参加してまいりました。

セミナーのゴール設定が「Webセキュリティの最新情報を知れた」であったので、WEBセキュリティの理解を深めたい僕にとっては丁度いいのかなーと思って申し込みました。

徳丸さん、主催のFindyさんの開催に感謝!

サードパーティークッキーがメインテーマ?

意気揚々と申し込んだのですが、仕事が長引いてしまって参加に出遅れてしまいました。

テーマの説明を見逃したっぽくて話全体の方向性を理解するのに苦労しながらの視聴になってしまいました。

以下、セミナーのメモです。

セミナーメモ

Firefoxにはブラウザ標準でトータルクッキープロテクションが実装されて、「サイトAの内容を持つiframe」を掲載するサイトBにおいてiframeにはサイトAのCookieは使用されない。

サードパーティクッキー廃止の流れがすすんでおり、ブラウザも対応を進めている。サードパーティクッキー廃止で対応が難しくなる部分はあるが、セキュリティ面を考えればプラスがある。

CORS(クロスオリジンリソースシェアリング)についてはフレームワークで対策がほどこされていることが多いが、ガバガバ設定(笑)になりえるので注意が必要。

CORS…あるオリジンで動作しているウェブアプリケーションに、異なるオリジンにある選択されたリソースへのアクセス権を与えるようブラウザーに指示するための仕組み。

ガバガバ設定にしてしまうとCORSで情報を窃取、改ざんのリスクが残る。そういった際にサードパーティクッキーが廃止されていると、そもそもCORSが難しくなるため安全性が高い。

CSRF攻撃…プリフライトリクエスト「①Cookieを使ってよいかの確認 ②Cookie使用にOKがでたら本当のリクエストを飛ばす」という手順で防いでいる。

CSRF攻撃...罠を設置した別サイトに誘導して、その別サイトでデータの窃取や改ざんを行う。

XSSの場合はサードパーティクッキー廃止では防ぐことが難しい。 XSSはサイトの脆弱性を利用してスクリプトを仕込む手順だったのでファーストパーティクッキーを用いるのでサードパーティクッキーが無関係。 XSS攻撃はCSPで対策しよう。

このあたりでセミナーから離脱しました。

セミナーを受けてみて

サードパーティクッキーの廃止、という事象を現職のマーケターとしてのみ接していたので「ユーザーデータの取得が難しくなる」くらいにしか捉えていませんでした。

徳丸さんのセミナーを聞いてみて、当たり前ですがブラウザもそれに応じて仕様が変化していることを知ることができました。

セキュリティに関しては攻撃手法と対策があって、そこの知識が増えたことで苦手意識が減ったように思います。興味はあるのでセキュリティ関連の教材にも手を出したいところです…。

と思ってたら、徳丸さんはYoutubeで色々とセキュリティに関する発信をされていました。まずはこちらを見ようと思います。

www.youtube.com

ではまた。

英語話者になりたい欲求に向き合う

こんにちは、Watanabeです。

プログラミングに触れてると、イコールで英語に触れる時間が長いものなので、英語が読めるようになると(どうせなら話せるようになると)いいなぁと漠然ながら思ってました。

だって母語でコードが書かれてたらめちゃくちゃ読みやすいと思うんですよ。しかも言語仕様に左右されないスタティックな能力として使っていくことができる。

話せるのも、洋書をすらすら読めるのもかっこいいですしね。 半分本当にそう思ってますが、強いエンジニアになるにあたって英語は欠かせないスキルだと考えてます。ぜひとも習得したい。

ということでDuolingoを始めました。始めてから1ヶ月くらい経ってますが中学英語から始めたので上達の実感はまだあんまりないです。 大学入試は英語が足を引っ張るくらいに苦手だったので実用レベルになるのは気が遠くなるくらい時間がかかるかもしれません。 とはいえ、千里の道も一歩から。英語すらすらエンジニアになれるように頑張ります。

Fly.ioにRuby 3.3.0を使用したアプリをデプロイしてエラーが出た話

こんにちは、Watanabeです。

エラー対応をしているときに対応に夢中になってしまってスクショを取り忘れることがほとんどです。こまった…。

自作サービスに障害発生

先日、自作サービスであるRails appのアップグレードを実施して本番環境にデプロイをして以降、本番環境でエラーが出てしまって表示されない状態になってしまいました。

エラーが出ている

デプロイは完了しているし、開発環境ではテストはすべて通って手動で動作チェックもしていたのでインフラ側の問題ぽいです。 Fly.ioは安い代わりに不安定みたいなところあったのですが、開発環境で問題なかったことに油断してデプロイ後にチェックを怠ってしまいました。以後気をつけます。

ログで調べてみても検討がつかなかったので、Fly.ioのコミュニティを探索。するとありました。

community.fly.io

こちらではRuby 3.3.0にしたところ私と同じ症状がでたとのことで、私と全く同じです。

回答を確認したところ、解決には「VMのメモリを増量してはどうか」とのこと。 トピ主はそれで解決したみたいなので、私もメモリを増量してみます。

無事に立ち上がってブラウザで閲覧することができました。

ちなみに、Fly.ioはデフォのメモリは無料ですが、性能を挙げていくほど月間の費用が高くなります。 今回は1段階メモリをスペックアップしましたが、費用がどうなるかはお楽しみということで。

ちなみに以前まで使っていたRuby3.2.2では特にデフォのメモリ量(256MB)でエラーになるということはありませんでした。

反省とか

デプロイが完了したらサービスサイトを確認するようにしないといけないですね。反省です。

深夜に発見したのでエラー対応ばかりまとめてしまったので今後原因をしっかり調べておこうと思います。

ブラウザで開ける開発環境「GitHub codespaces」でどこでも開発にチャレンジ

こんにちは、Watanabeです。

自作サービスを開発していたころに「移動時間もコーディングできたら時間を有効活用できるな」と常々思っていました。

PCだと腰を据えるような環境じゃないとなかなか開けなくて作業ができず、コーディングをしたいのに読書などに移動時間を充てていました。

読書はそれはそれでいいんですが、腰を据える時間だけが取れないこともあるので移動時間の有効活用というのは永遠のテーマです。

そこで、スマホタブレットで開発環境を立ち上げられないかなーと探したところ行き着いたのが「GitHub codespaces」です。

GitHub codespacesとは

クラウドでホストされた開発環境です。WEBブラウザなどで動作します。

Chromeで開いたGitHub codespaces

仮想マシン上で実行されている Docker コンテナー内の GitHub によってホストされます。 仮想マシンの種類は、2 コア、8 GB RAM、32 GB ストレージから、最大 32 コア、64 GB RAM、128 GB ストレージまでの範囲から選択できます。OSはLinuxが使用されます。

任意のブランチからcodespacesを起動することができ、リポジトリを開いた状態のVSCodeが起動します。 設定はカスタムすることが可能です。私はそこまで触りませんでしたが…。

個人ユーザーであれば基本的に無料で使用できます。ストレージを15GB/月を超過するか、利用時間とVMのコア数の乗数が既定値を超えると請求がかかります。

詳細はDocsを御覧ください。

docs.github.com

実際に使ってみた感想

iPadで開いた様子

移動中でもちゃんとVSCodeライクな開発画面がでてきます。 15〜30秒で起動するので移動中ということを差し引いて特に不都合はないかなというところ。

ただし、「移動中にコーディングをしたい」に関しては、そもそもiPadiPhoneの入力形式がコーディングに向いておらず非常に時間がかかるため、本来の目的は果たせませんでした。

どちらかというとGitHub codespacesの目的は「複数端末、複数人で手軽に同一環境を構築すること」にあるんじゃないかと思います。 そういう視点から見るとボタン一つで開発環境が立ち上がるのは非常にラクでいいですね。

結論

GitHub codespacesは結局使ってないです。

移動はインプットに使うのが良さそうです。コーディングであれば「どう構築していくか」を計画するのが移動中には適しているんじゃないでしょうか。

参考