Slide 1

Slide 1 text

【CircleCI】TypeScriptのLint結果を定期的にSlack 通知することで 少しずつ型安全になっていく様を眺めていく 2021.05.20 @tachibanayu24

Slide 2

Slide 2 text

About me @tachibanayu24 たちばな ゆうと(@tachibanayu24) ● 💻 オンボーディング支援の HRサービス Onnでテックリード ● 💚 TypeScript/React/Goなどが好き ● 🤔 PS5買えたものの下手すぎて最近起動してない

Slide 3

Slide 3 text

About Onn @tachibanayu24

Slide 4

Slide 4 text

TL;DR ● 😇 今の会社にジョインしたとき、 TSの設定が strict: false だった ● 🤔 Lintエラーを減らしたいがリリースして間もないのでどんどん新規開発しなければならない ● 💡 一気に修正するのはきついので、毎日残りエラー数を Slackにpostして意識付けしていく ● 👏 2ヶ月半で80%のLintエラーは修正できた @tachibanayu24 👇 Zennにも書いてます 【TypeScript】CircleCIで毎日Lintの結果をSlack通知して少しずつstrictにしていきたい https://zenn.dev/tachibanayu24/articles/fd5ea1cb021f3a 撮影・シェアOKです 󰢏 後ほどスライドはアップロードして Tweetします

Slide 5

Slide 5 text

strict: true TypeScriptでStrict Checksをすべて有効化する デフォルトではtrue 当然trueが推奨される 放置すると保守性が低く、危ないコードになっていく。。 noImplicitAny / noImplicitThis 暗黙のanyや、それを持つthisを許可しない alwaysStrict use strictにしてくれる strictNullChecks nullとundefinedを区別する @tachibanayu24 strict: trueにすることで設定されるオプションの一例 (これ以外もあるよ! )

Slide 6

Slide 6 text

Approach ● 時間を止めてリファクタリングに集中することは出来ない ● ある程度の人数のチームで同時に進める必要がある ● とはいえ直ちに修正しないといけない問題というわけではない 👉 まずはどれくらい Lintエラーが残っているのかを毎日レポートして、チーム全体の意識付けを強化する @tachibanayu24

Slide 7

Slide 7 text

Approach codebase scheduled task POST checkout Lint Report result やったことは非常にシンプル 1. 深夜0時にGitHubからcheckoutしてくる 2. eslintを実行する 3. 結果をSlackに流す @tachibanayu24

Slide 8

Slide 8 text

Code #!/bin/bash # Lintの結果をSlackに通知します result_text=$(yarn lint 2>/dev/null | grep "✖") # ✖があるのは結果行 slack_payload=" [ { … }, { 'type': 'section', 'text': { 'type': 'mrkdwn', 'text': '${result_text}' } }, { … }, { … }, ] " curl 'https://slack.com/api/chat.postMessage' \ -X POST \ --header "Authorization: Bearer ${SLACK_ACCESS_TOKEN}" \ -d "channel=${SLACK_DEFAULT_CHANNEL}" \ -d "text=${result_text}" \ -d "blocks=${slack_payload}" - run: name: Send Lint Results command: sh .circleci/send_lint_result.sh; nightry: triggers: - schedule: cron: "0 15 * * *" # UTC filters: branches: only: - develop jobs: - lint jobをスケジュールして checkoutや依存関係のインストール後にshellを実行するようにして 実行結果 を取得してSlackAPIを叩くだけ @tachibanayu24

Slide 9

Slide 9 text

Result ● 2/26: 603個 -> 5/20: 117個 まで減った 👏 ● 残り50個とかになったらあとは一気に lint errorを潰してTSの設定を変える予定 @tachibanayu24

Slide 10

Slide 10 text

Conclusion ● TypeScriptをstrictな構成に近づけていく取り組みについて話しました ○ CircleCIを用いて定期的に ESLintを実行し、エラー数をメンバーで監視することで、無理なく Lintエラーを減らし ていくことが出来ました ● かなりシンプルなことしかしていませんが、「こういう使い方もできるなぁ」という話でした 🙏 @tachibanayu24

Slide 11

Slide 11 text

入社オンボーディングを支援する HRサービスOnn 絶賛エンジニア募集中です! 正式版リリースしたばかりなのでばかりなので技術選定などから積極的に関わることが出来ます! 話聞いてみたいな〜 という方はHPか立花へのDMまで 👉 https://onn-hr.com/ or @tachibanayu24 @tachibanayu24