こつつみ

ueshoのブログ

本番は早く経験したほう良い

転職活動やスキル習得、あるいは競技プログラミングを通じて、やっと腑に落ちたことがある。それは「本番を早く経験することが理想の状態になる近道である」ということだ。

どれだけ事前に準備や勉強をしても、実際に本番を経験しないと見えてこない学びや気づきが多い。いくつか自分の例を挙げて考えたい。ここでいう本番は公式な場だけでなく小さな実践のことも指している。

本番から学んだ例

競技プログラミングでの学び

競プロを始めたとき、最初は自分で練習問題を解いてある程度解けるようになってからコンテストに参加しようと思っていた。そして、実際そうした。でも、実際にコンテストに参加しないとスピード感だったり、面白さだったりと得られないことあった。競プロは毎週コンテストがあるから、本番を経験(コンテストへの参加)するハードルは低いけど、それでも参加してみて初めて「どれだけ他の人と自分にギャップがあるのか」を知ることができた。

転職活動での学び

転職活動でも同じことを実感した。ある企業でシステムデザイン面接を受けた。その準備のために、模擬面接やYouTubeや記事などで2週間ほど勉強して自分の中に落とし込めたが、本番を経験してみて初めて明確になる課題があった。自分のアウトプットが「理想」とどれだけ違うのかが明らかになり、その差が学びになった。次に受けるときは、さらに良いアウトプットができるだろう。

英語学習での学び

英語も同じだ。毎年毎年「今年こそ英語を勉強するぞ」と言い続けていたが、あまり続いていなかった。ただ、実際に外国の人と話せる環境に飛び込んでみたところ、本当に何も聞き取れず話せずで、「今すぐやらなきゃ」という危機感を持った。このギャップを体感しない限り、本当のスタート地点には立てなかった。

アウトプットの重要性

どうしても完璧にスタートしたいって気持ちが出ちゃうけど、そんな必要は全くなくて、むしろ、どれだけ早く間違えるかが大事。

理想との「ズレ」や「不足」を見つけるためには、まず何かをアウトプットして比較対象を作らないといけない。アウトプットがないと、何がズレているのか、どこが足りていないのかも分からない。だから、とりあえず形にするのが一番重要。このズレや不足を修正していくことで、学びが生まれる。

自分は周りにしょぼいなとか浅いなとか思われるのが嫌でアウトプットできてない面がある。アウトプットが怖いと思うのは自然なことだ。ただ、それだとずっとその状態のまま。最初から完璧を目指すよりも、恥ずかしくても一度アウトプットを出すことが大切。

自分の理想像に近い存在として、勝手ながらこにふぁー (id:konifar) さんのようなアウトプットを目指したいと思っている。この記事をその第一歩とする。

AIが機能し始めたら、もはや誰もAIと呼ばなくなるだろう

2024/6/20にAWS Summitに参加した。とにかく人が多く、さらにどこのブースも生成AIの話をしていた。

AmazonのCTOヴァーナー ボーガスの基調講演も同じくAIについての話でしたが、すごく印象的だったので共有したい。 彼は「AIが機能し始めたら、もはや誰もAIと呼ばなくなるだろう」と話していた。

例えば、Amazonの工場ではAIを使った自立型運搬ロボットが動いており、それを「AI」とは呼ばず「ロボット」として認識している。AIが日常や産業に自然に溶け込むと、それが特別なものとは思われなくなる。

AIの発展にはデータが超重要である。ボーガス氏は「データは特権的アセットになる」と話していた。医療業界では、トレーニングデータの情報漏洩に対するリスクが高く、医療画像などの機密データが多い。データの質と量がAIの性能を左右するけど、現状では公開データだけでは精度が低い。 彼の言うようにAIにはデータの民主化が必要だと思う。データがもっと自由に使えるようになれば、より良いAIが作られて、いろんな社会課題を解決できるようになる。

自分は医療業界でAIのデータ利活用を考えてる企業に所属しており、その発展に貢献できるかもしれないことにワクワクしている。 将来、AIシステムが病気を早期に発見するのが当たり前になる未来が楽しみだ。そうなったら、それらのシステムは「AI」とは呼ばれず、ただの「医療システム」として認識されるんだろう。AIが完全に日常に溶け込むことで、その存在を特別視しなくなる。

AIと社会課題

ボーガス氏からAIを用いて社会課題を解決しようとしている企業の話があり、いくつか調べたので最後に紹介して終わりにする。

食について

世界の人口は2050年には20億人増えて97億人になると予想されている。そのため、大きな問題として食料問題がある。

HARA

HARAは、ジャカルタに拠点を置く企業で、AIとブロックチェーン技術を活用して小規模農家を支援している。具体的には、農家のデータを収集して分析し、農家が信頼されるプロフィール(デジタルアイデンティティ)を作成する。これにより、農家は金融機関からの融資を受けやすくなり、農業生産性向上のためのデータ分析やアドバイスを提供する。 そもそも東南アジアでは小規模農家には銀行が融資をしてくれなくて、タネが買えず闇金に行く人も多いそうだ。この企業がそれを解決しようとしている。

www.hara.ag

International Rice Research Institute (IRRI)

IRRIは、フィリピンに本拠を置く国際的な農業研究機関で、AIを活用して栄養価の高い米品種の開発や持続可能な農業技術の普及に取り組んでいる。これにより、世界の貧困や飢餓に対応するため、より栄養価の高い米を作ろうとしている。 世界中から集まる種をAIの画像認識で仕分けしたりしているようだ。

www.irri.org

YANMAR

YANMARは、日本の企業で、農業やエネルギーシステムの分野で広く知られている。AIを用いて温室を管理・最適化し、作物の成長を効率的にすることで、農業の生産性向上と持続可能性の実現に取り組んでいる。

www.yanmar.com

Aquabyte

Aquabyteは、AI技術を用いて養殖業を効率化する企業です。特にサーモンの養殖に焦点を当て、魚の健康状態や成長をモニタリングし、餌やりを最適化しています。これにより、養殖業者は生産コストを削減し、持続可能な方法で魚を育てることができ、効率的にタンパク質を提供することが可能になります。

aquabyte.ai

医療について

Swoop Aero

Swoop Aeroは、ドローンを使用して貧困国にワクチンを送る取り組みを行っている。これにより、アクセスが困難な地域でも迅速に医療物資を届けることができ、医療サービスの向上に寄与している。AIを活用したドローンの運行管理により、効率的で安全な配送が可能になっている。

swoop.aero

dr.consulta

dr.consultaは、アクセスしやすい医療サービスを提供する企業で、特にブラジルの都市部での医療サービスの改善に取り組んでいる。オンラインプラットフォームとAI技術を活用して、診療予約や医療データ管理を効率化し、患者が迅速に医療サービスを受けられるようにしている。

drconsulta.com

Cergenx

Cergenxは、新生児の脳損傷を早期に検知するための脳波検査技術を開発している。AIを用いた脳波データの解析により、脳損傷の早期発見が可能になり、適切な治療を迅速に提供することができる。これにより、長期的な健康リスクを減少させることが期待されている。

www.cergenx.com

プログリットに入会した

去年転職してから英語の勉強を継続してきましたが、正直全然伸びを感じられないので、思い切って英語コーチングスクールであるプログリットを契約してみました。

www.progrit.co.jp

なぜ英語を勉強するのか?

私の会社には主に2つのプロジェクトがあります。一つは自社製品に関するメインの事業で、もう一つは私が担当している新規事業のようなプロジェクトです。クライアントが日本人であるため、主に日本語を使用しています。その結果、面接では英語は不要で、何とか入社することができました。しかし、会社の公用語は英語で、同僚の半数は外国人です。特にエンジニア部門では、現在私だけが日本人です。

私のTOEICのスコアは、入社前の昨年に受けたときは620点で、英語を話せるレベルではありませんでした。しかし、「英語を学ぶ良い機会だし、何とかなるだろう」と楽観的に考えて入社しました。ところが、英語が話せないのは私だけで、なかなか辛い状況です。読み書きはDeepL翻訳を活用しながら何とかこなしていますが、同僚とランチに行った際は、会話の内容をほとんど理解できず、愛想笑いしていることがほとんどです。

入社後10ヶ月ほどが経過した今年3月に再度TOEICを受験したところ、結果は690点でした。 このままではまずいと感じ、本気で英語を学ぶ決心をしました。

なぜプログリットを選んだのか?

プログリットはそもそも、英語のレッスンをしてくれる訳ではなく、勉強の仕方を教えてくれるという点にあります。 実際に英語のレッスンは行われないが、学習方法や時間の管理を指導し、毎週の面談でテストを行い学習の定着度を確認します。 簡単に言えば、英語版ライザップのようなものです。

プログリットを含む3つの英語コーチングサービスの無料カウンセリングに参加しましたが、プログリットは理論に基づいた説得力のある説明が特に印象的でした。 無料カウンセリングに行く前に、かなり入念に調べましたが良い口コミが多かったのも選んだ理由の1つです。

プログリットへの入会

無料カウンセリングでは、まず私の英語学習への動機について話し、以下のテストを受け、希望者は入会手続きという流れです。

  • 単語テスト
  • リスニング
  • ディクテーション
  • 瞬間英作文
  • 1分間スピーキング

このテストが全然できなくて自信を無くしましが、理論に基づくフィードバックを受け、提案された学習方法を続ければ上達できると感じ、入会を決めました。 ただし、プログリットは人気が高く(?)、契約してもすぐには始められず、約1ヶ月半の待機期間があります。

私は7月に長期旅行を計画していたため、旅行後の7月16日から3ヶ月間のプログラムに申し込みました。

金額はなんと約60万!!!!高すぎる。ただ、安かったらサボるだろうし、最速で英語力を伸ばしたかったので課金することに決めました。 幸い、一般教育訓練給付金という国の制度を利用すれば、10万円が返金されるので少しは救われます。

プログリット値段

始まるまでの待機期間での活動

待機期間中もプログリットから教材が送られてきており、毎日それに取り組むように言われています。ただし、この期間中はコンサルタントのサポートはないため、自己学習が必要です。 自分がもらった教材はこれです。無料カウンセリング時のテストが全然できなかったため、中学生からのやり直しです。なんか最近できると勘違いしてきていたので、現実を突きつけられました。

プログリットでは受講期間の初めと終わりにVERSANTというテストを使って英語力を測定しています。 受講まで2ヶ月あり、その間にどれだけ改善できるかを個人的に確かめてみたいと思い、個人でVERSANTを受験してみました。その結果がこちら。

VERASANTにはスコアの指標がGSE(Global Scale of English)とVERSANTスケールの2つあります。 PROGRITの卒業生の声で使われているのはVERSANTスケールの方みたいです。

私のスコアは日本人の平均以下で36点でした。とても悔しいので、受講開始前にCEFRのA2+に相当する41点を目標に頑張ります。少なくとも日本人の平均である38点を超えることを目指して頑張りたいと思います!

最後に

プログリットはともだち割で受講料2万円安くすることができるみたいなので、興味ある方はueshoにDMください。一緒に頑張りましょう!

AIの力で変わるコードレビュー:PR-Agentで開発効率アップ!

昨年からAIの進化が目覚ましく、私はChatGPTやGitHub Copilot、Grammarly など、多岐にわたるAIツールを活用しています。その中でも特に注目したいのが、プルリクエストのレビューを助けてくれる「PR-Agent」です。このツールはCodium AIによって開発されたオープンソースプロジェクトです。

github.com

導入のきっかけ

私は現在ほとんど1人で開発をしているので、コードレビューがなくこれで問題ないか自信が持てない状況でした。そんなある日、LayerXが公開した記事を読み、その内容に「これが自分が求めていたものだ!」と思い、次の日に私は会社に導入を提案しました。

同様のサービスであるCodeRabbitも検討しましたが、GitHubスターの数でPR-Agentが上回っていたこと、さらにCodeRabbitがサブスクリプションモデルを採用していたため、将来的にコストが増加する可能性を避け、PR-Agentを選択しました。(現在はPR-Agentにもサブスクモデルがあります)

主な機能

PR-Agentの最大の魅力は、OpenAIのAPIキーさえあれば(現在は他のAPIでも実行可能です。)、CI環境に簡単に統合できる点です。実際に私はGitHub Actionsを介して導入しました。

簡単な例として、OpenAIのモデルアップデートを利用してPRを作成し、PR-Agentがどのように機能するかを見てみましょう。

設定に応じて、自動的に説明を追加したり、レビューやタグ付けを行ってくれます。私の場合、英語のままにしていますが、日本語での使用も可能です(詳細は先に紹介したLayerXの記事に記載されています)。

まず、概要を書いてくれます。

その後、PRの分析。 ここでは、レビューにかかる見積もりコストを数値化してくれるので、レビュワーに対しても優しいですね。

そして、自動でレビューを行ってくれます。(自動でする設定をしています)

PR-Agentは、以下のようなコマンドをインラインでのレビューや質問にも対応しており、コードレビューのプロセスを大きく効率化してくれます。

参考までに、GitHub Actionsでやりたい場合、OPENAI_KEYGitHubのRepository secretsに設定し、以下を .github/workflows/pr-agent.yml に配置すれば、自分と同じ動きができるはずです。

OpenAIのモデルについては、 gpt-4-1106-preview を使っていますが、こちらから選ぶことができます。

name: PR-Agent

on:
  pull_request:
    types: [opened, reopened, synchronize]
  issue_comment:
    types: [created, edited]

jobs:
  pr_agent_job:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      issues: write
      contents: write
    name: Run pr agent on every pull request, respond to user comments
    steps:
      - name: PR Agent action step
        id: pragent
        uses: Codium-ai/pr-agent@main
        env:
          OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CONFIG.MODEL: "gpt-4-1106-preview"
          github_action_config.auto_describe: "true"
          github_action_config.auto_review: "true"
          github_action_config.auto_improve: "true"

総評とAIレビューのメリット

PR-Agentを使ってみて、悪い点を見つけるのは難しいです。唯一、Code Rabbitのようにレビューコメントに直接返信しても反応がない点が挙げられますが、それを差し引いても、このツールの提供する価値は計り知れないです。

AIレビューの大きなメリットは、自分では気付かなかった問題点や改善点に気付けることです。特にセキュリティに関しては、「security concerns」という項目が設けられており、これが非常に役立っています。コードの安全性を高めるための指摘や提案を受けることで、より堅牢なソフトウェア開発が可能になります。

プログラミングの世界でのAIの活用はまだ始まったばかりですが、PR-Agentのようなツールが開発の質と速度をどれほど向上させるか、これからの展開が非常に楽しみです。


この内容をLTしました。

speakerdeck.com

2023年の振り返り

昨日で仕事納めをしたので、2023年を振り返りたいと思います。

転職

メーカー企業でエンジニアをしていましたが、6月にスタートアップ企業に転職しました。それにより、環境も大きく変わりました。 元々、新卒時代は大企業が良いという考えがあったため、スタートアップに転職することは勇気がいりましたが、結果的に転職して良かったです。

主な変化

前職では、AWS Lambda、DynamoDB、SQS、SNSをメインに使ったマイクロサービスの開発をメインで行っていました。APIを作るときはAPI GatewayとLambdaを使っていたので、一般的なWebフレームワークやRDBは実務で使ったことがなかったです。転職して、RDBはもちろん、フロントはNext.js、バックエンドはFastAPI、インフラはAWS ECS周りでTerraterm(Terragrunt)を使うようになりました。

1人開発へ、、

入社時には、自分のプロジェクトには開発メンバーがもう1人いたのですが、自分が入社して1ヶ月で辞めてしまい1人で開発しています(上司はいます)。 使う技術は大きく変わったのですが、個人でVue.jsやFlask, MySQLを触っていたり、簡単な自作RDBMSを作ってみたりしたので、基本的な概念は分かってなんとかなっています。ただ、これで良いのか自信が持てないのが辛いです。インフラの構築に関しては、もう1人の同僚にも手伝って進めています。

スタートアップかつ1人ということもあり、自分の役割は信じられないくらい広くなりました。良いと思う反面、中途半端になっていたり、これで大丈夫なのか?という不安は常にあります。

自分とAI

1人でやっていることもあり、AIは(セキュリティは気を付けつつ)フル活用しています。GitHub CopilotやChatGPTはもちろん、PR-Agent というAIのレビューを導入して開発しています。

前職では使うことができなかったツールを多く使えて、効率よく開発ができるようになったと感じます。

英語への挑戦

転職して公用語が英語になりました。しかし、会社ではプロジェクトが分かれており、自分の関係者は日本人が多いため普段は日本語でミーティングをしています。転職時の面接も全部日本語でした。とは言ってもslackや、GitHubのPRやタスク管理は全部英語です。

自分は毎年英語を「やろう」と思っては、前職では「使わないからいいや」となってしまい継続ができませんでした。転職するにあたってTOEICを受けてみたところ620点でした。 一緒に同僚とランチをするのですが、いつも「聞き取れない→話の内容がわからないから話せない」という状態になってしまっています。性格的にもお喋りではないので、積極的に話にいけず苦労しています。

現状を打破するために英語を本格的に勉強し始めました。

オンライン英会話

DMM英会話をやっています。最初の頃は、デイリーニュースを見て質問に答えていくみたいな感じでやっていたのですが、スクリプトが用意されており予習時に事前に回答を考えて、それを読むだけになってしまい効果を感じなかったです。

なので、フリートークをするようにしたのですが、負荷が高すぎてサボってしまうことも増えてしまっています。週5で継続してやっていきたい。

英語日記

英語日記を書いて、先生に添削してもらうってことをしています。こちらは実際の話で使える内容なので、とても効果を実感できます。 しかし、他の技術の勉強をしたりなどで全然復習をせずにいるので、学んだことを忘れて活かしきれていないです。

色んなことに手をつけてしまっているので、来年はこれをメインに学習して話で使えるように、何回も音読することを繰り返していきたいと考えています。

シャドーイング

リスニングが全ての基本になっていると思っているので、効果があると言われるシャドーイングをやっています。

TOEICの精選模試 リスニングを解いて、シャドーイングするを繰り返し行っています。12月に買ったばかりなので、まだ1つ目の模試も終わっていないです。来年には全部シャドーイングできるようにしていきます。

11月時には、シャドテン をやっていたのですが、流石に月に2万払う価値はないなと思って辞めてしまいました。 2万払っているので、絶対にやらないといけないという気持ちがあったから継続できたとは思うけど。

今年できなかったこと

  • 個人プロダクト作成
    • 自作RDBMSはしたが、Webサービスを作ろうと考えていた
    • Twitter API有料化により断念して、そこから何も作らなかった
  • 登壇
    • 小さいところで良いから、アウトプットをしようとしてしなかった

年間目標を立てるのをやめて、月とか週で目標を立ててやっていこうと考えていました。実際に転職とか予想できなかったこともあり、目標設定しても上手くいったか分からないが、結局月・週で目標を立てることもしなかったので、気の緩みがあったようにも思います。

kotsutsumi.hatenablog.com

ただ、Terakoyaというコミュニティに参加して、オフラインで人に会ったりして、ある程度モチベーションを保って活動できました。

peraichi.com

来年の目標

目標立てることが性格的にあっているみたいので、今年は立てます。

  • 英語で同僚と議論できるようになる
    • TOEIC820点は必ず取る (友達が815点らしいので)
  • アウトプットを増やす
    • 登壇は必ず1回はしたい
  • 完全朝型生活にする
    • 夜は家族との時間を大切にする
  • ワクワクしながら仕事をする

少なくとも上は達成できるようにしたいです。

まとめ

今年は大きい変化がある年でした。自分がした選択を正解にできるように行動していきたいと思います。

Node.jsでISUCON13に参加した

ueshoです。久しぶりにブログ書きます。 タイトルからNode.jsでのISUCONはどうやるのか見にきた人ごめんなさい。ただの振り返りで何も役に立たない内容です。

2023/11/25に開催されたISUCON13に Buzoimajo と一緒にチーム「slasher」として初めて参加しました。個人では昨年はPython移植作業を担当させていただきましたので、どういうコンテストなのかは分かっていました。 言語はみんなが触ったことのあるTypeScriptであるNode.jsでやりました。

これは、競技中にYouTube配信で流れるチーム紹介のスライドです。TODO:を書いたまま期限を忘れて編集ロックかかってしまいました🤣

チーム紹介スライド

事前準備

初参加なので、初動の確認を含めてチームで問題を解くのは、10月末から3時間を4回くらい行いました。 最初の2回くらいはISUCONの説明と初動の確認をして、その後、ISUNARABEを使ってISUCON12予選を解きました。

個人では、private_isu を(Go言語で)20万点まで、ISUCON12予選をNode.jsで解きました。

デプロイ方法等は、チーム「織時屋」のリポジトリから拝借してMakefileで行いました。

初参加ということもあり準備段階でツールの使用方法、Nginx, Mysqlの設定、初動何するかとかを考えることで結構時間を使ってしまい、過去問をたくさん解くことができなかったです。

本番当日

Buzoとimajo がアプリケーション担当、自分がインフラ担当という役割分担をしました。(本職はインフラではないので、何すれば良いか分からずアプリケーションの改善をしてしまいました) Buzoとimajoでindexを貼ったり、N+1を潰したりをしてもらい結果的に6793点でfinishしました。自分は何もできず終わりました。

ISUCON13 受賞チームおよび全チームスコア : ISUCON公式Blog

自分目線で反省の意味も込めてやったことを記載します。

  • 10:05 初期実装(Go)でベンチを回す。スコア3636点
  • 10:10 リポジトリのセットアップ
  • 10:20 Node.jsに切り替え。mysqlのパラメータ修正。かつ、alp, pt-query-digest, notify_slackのセットアップ完了。ログをとるも何と設定したサーバーが違っていた、、
    • てっきりベンチマーカーの初回の向き先は必ずServer1になると思っていたので、困惑しました。
    • また、ポータルのどこからベンチマーカーの向き先を変えるか分からずServer3をメインで使いました
  • 11:00 ここでやっとセットアップ完了。Node.jsでスコア2642点
  • ~13:00 alpの結果からiconが遅く、かつ、画像がDBに入っていたので、private_isuと同じだ!と思い、nginxから配信するように変更しようとした。アプリケーションマニュアルにあるicon_hashや304をどうすれば良いか分からず、結局断念。
  • ~14:00 DNSmysqlをServer2に移行させようとするが、ベンチがFailで失敗。深追いせずやめ
    • おそらく後述のDBにユーザーを作っていなかったのが原因。
  • ~15:00 moderateのN+1に着手。少し改善したが、SQLの根本的な改善はできず、、、
  • 16:00 そろそろ複数台にってことで、アプリケーションのDBをServer1に移行しようとするも接続できず、、、
    • ISUCON12のようにIPとbind_address = 0.0.0.0設定すればいけたので、それしかやらず
    • 実際には、isucon@localhostなユーザーしかいなかったので、対象のインスタンスにアクセス可能なユーザー作る必要がある

振り返り

過去問だけなぞってやるだけで、ミドルウェアの仕様をちゃんと読んでおくということはしなかったので、こういう結果になってしまったと考えています。詰まった時に、思い至れるようにしておくというの大事です。 Nginxの設定や、コネクションの設定など、やりたかったのにできなかったことも多々あります。また、DNSは知識がなさすぎて、手をつけられずという状態だったので、しっかり復習をして自分の知識にしたいと思います。

最後に

運営の皆さんありがとうございます。楽しいコンテストだったので、来年も参加します! 誘って参加してくれた Buzo と imajo ありがとう。

「スタートアップでDDDを最大限使いこなすには? ~事業と組織を連携するプロセスづくり~」に参加しました

こちらのイベントに参加して学びがあったので忘れないうちに記録に残します。

loglass-tech.connpass.com

コミューン株式会社さんと株式会社ログラスさんの2社でDDDの活用方法についてパネルディスカッションをする会でした。コミューン株式会社オフィスで開催するオフラインイベントで、自分にとってはコロナ明けて初めてのオフラインイベントでした。

参加の目的

自分は来週新しい会社で働きはじめます。現職はメーカー企業でソフトウェアエンジニアをしており、担当プロジェクトにDDDを導入してきました。

新しい会社はスタートアップ企業で自分が所属するプロジェクトはまだリリースされていない段階です。おそらくDDDは導入していないと思われますが、DDDを導入するかの判断基準や、スタートアップにおけるDDDのメリットを知れればと思い参加しました。

パネルディスカッション

今現在の開発テーマや組織の状況、DDDの取り組み状況について

  • コミューン
    • 去年、軽量DDDをやろうという流れがあり、これからDDDを本格的に取り入れる段階
  • ログラス
    • 開発チーム5個くらいで、どのチームもDDDでモデリングから行なっている
    • エンジニアは既にあるコードを参考に実装する、いわゆる横展開は得意。モデリングは1から作るので最初大変だけど、どのチームもモデリングを行う文化ができている

コミューンさんも話していましたが、軽量DDDにも良さがある一方、やはり複雑な事業でモデリングをしてこそDDDが真価が発揮されるのだなと改めて感じました。

※ 軽量DDD: DDDのValueOvject、Entity、Repositoryなど技術的な部分のみを取れ入れDDDを行うこと

DDDをはじめようと思ったきっかけ

  • コミューン
    • コミュニケーションの齟齬が大きくなってきた
    • チームが機能ごとではなく割と適当に2チームに分かれている。それをしっかりコンテキストを認識して是正したい
  • ログラス
    • ドメインエキスパートであるCEOと共通言語が必要
    • コードはレビューできないが、モデルはレビューできる
    • データモデルだけは変わらないけど、ピボットが何回も起こることを考えてDDDを導入

増田さんから以下の話もありました。※ 勝手に引用すみません

ログラス社の「コードはレビューできないが、モデルはレビューできる」という言葉を聞いて妙に納得できました。

ただ入社してすぐに無理やりDDD導入すると失敗するでしょう。転職先はまだプロダクトもリリースされていないのでDDD導入がまだしやすい時期だと思いますが(?)、増田さんが話されていたようにチーム全体で話し合って必要があれば進めていきたいです。

DDDを導入してから組織に広げていく過程の課題

  • コミューン
    • エンジニアだけで閉じているとうまくいかない
    • PdMにDDDの理解をしてもらう必要がある
  • ログラス
    • 最初はServiceクラスを撲滅して、usecaseに書き換えることから始めた。(実装から入って、モデリングは後でやった)
    • 設計の検討事項やプログラミング言語のこれが良いなどのベストプラクティス集のような設計標準を用意している

ログラスさんのユースケースドメインリファクタリングから始めて、周りにコードの見通しの良さを広めることはどこの会社でもできそうですし有効な手段だなと感じました。その後。新機能の開発からモデリングや集約の設計を行うことは、合理的で実践しやすそうなのでやっていきたいです。

所感

目的であった転職先でのDDD活用は、実際に事業がどれだけ複雑か、共通言語ができていないなど課題があれば前向きに導入を検討したいと感じました。(無理に導入する必要もない)

途中で増田さんが話されていた、モデリングで仮説を出したら、実際に実装をしフィードバックを受ける。そしたら再度モデリングといった 「モデリング→実装→フィードバック→モデリング」を高速で繰り返していくことが何よりも大事だと感じました。

上を実践する上で、松岡さんが話されていた(アート・オブ・アジャイル デベロップメントに記載のある)「リファクタリングは絶え間なくする」は心に刻んでおきたいと思います。

最後に

懇親会ではピザ食べれました🍕ごちそうさまでした。

抜け漏れ、間違いあるかもしれませんが、ご容赦ください。 当日参加されていた方で、明らかな間違いに気づいた点があればコメントください。