---
# System prepended metadata

title: Untitled

---

## forem を読む会

### 順番
伊藤->大谷->根岸->前田->深谷->箕輪

### DeveloperGuide
https://developers.forem.com/

### 2023/02/22 ドライバー：箕輪 メモ：大谷

- TOPページ見てみる
    - stories_controller.rb
       - honeycomb-beeline gem
          - 分散トレーシングツール
    - handle_base_index
        - user_signed_in?で出し分け
            -  feed stories
        - hero
        - podcast 
    - index.html.erb
        - timeframe
        - Cache main-stroies-index 90sec
        - signin で出し分け
            - main feed
            - header
            - sidebar
    - _main_stories_feed.html.erb
        - spam suppression
            - sign up pash 
            - スパムはアカウント作成に誘導
        - 基本sign in に誘導？
    - _single_story.html.erb
        - feed内の個別記事のカード
        - Pinした記事のカード
        - feed内の各記事カードのテンプレート
    - show.html.erb
        - 記事本体
        - article
- model見る
    - queries
        - active_threds_query.rb
        - self.call で引っ張ってくる
        - relationに渡してるのはなぜ？
            - https://github.com/forem/forem/blob/ef290a5120da6febcb07e803a43caeb2b668c162/app/controllers/admin/mods_controller.rb#L15
            - 上記はFieldsを絞りたい場合の例
            - 柔軟性を期待したい？
            - Queryパターンがそもそもあんまり使われて無さそう
            - 全部が全部relationを持っているわけではない

    - service/articles/feeds/article_score_....
        -  





### 2023/02/15 ドライバー：根岸 メモ：箕輪
- Feed
    - 

- Compatibility
    - 更新性を担保
    - メンテナンス性
    - Human Interface
    - オープンなプラットフォームを意識している(クローズに対して)
    - Meta tags

- A/B test
    - field_test gemを使ってA/Bテストを実装している
    - feature toggle 機能 (トクバイでいうchanko)
    - 技術的というかプロダクト的にうまく設計している
- Internationnalization(i18n)
    - jsへのインターフェースにi18n.jsというのを利用している
- Caching
    - ネットワーク層、フラグメントetcいろいろ
    - タイムスタンプを含んでいる
        - やったほうがいい
        - updated_atを含んでいた
        - Railsのキャッシュのキーに変更あり
            - 昔はupdated_atがつかわれていたが、これに変更が入った
            - foremは少し古い？
 - Installation
     - 割愛
 - Getting Started
     - bin/startup
     - advanced
         - overmind ??
             - process manager
             - tmuxの上で
             - debugもいろいろできる。debug sessionを立ち上げられたり
 - Suggested Wrokflow
     - springを利用
     - synchronizing....
         - forkをうまく
         - コミュニティでうまく開発するためのツールが整備されている
- API開発
    - rswag gem
      - Swagger、OpenApiと互換性あり
- 以降Backend Guide
- Additional Database options
    - Seed Data
        - データ量をコントロールできる
    - Audit Log
- Authentication
    - 割愛
- Configuration
    - Valut by Hashi Corp
        - 秘匿値管理
- データ更新スクリプト
    - マイグレーション？
        - 実際のデータを更新するための機構っぽい
- Email
    - sendgrid, mailgunなどを使う
- Fastly
    - スニペット
        - VCL。Varnish
    - ホワイトリスト
        - e.g. ページングなど
        - 悪意ある場合など、なんらかの文字列つけた場合にキャッシュされてしまうのを回避したり
- ロール
    - Rolify gemを利用している
- Notification
    - sidekiqから送信している
- Scheduled Jobs
    - heroku
- Metrics
    - Statdsdを利用してDatadogに送信する
    - perform_asyncで非同期送信
- プッシュ通知
    - Rpush gemを利用している
        - デファクト目指している
- Tracking
    - Ahoy gemを利用している
        - db migrate -> DBに格納する
    - GDPRに気をつける必要がある
        - default offにしている
- Service Objects
    - PORO実装
    - 命名規則
        - モデルとの違いがわかるようにしている
    - generatorがいる
    - rails wayと離れた実装が含まれているのが特徴的
- Philosophy
    - アイランドアーキテクチャ？
        - 部分的なところだけjavascriptが読み込まれる
        - microfrontend?
    - javascript approaches 5つある。正気火w
    - 管理画面になんでもかんでもReactみたいなケース考えられるので、bargain取り入れたほうがよさそう
        - initializer
        - パックファイル&webpacker
            - javascript_packs_with_chunks_tags ★覚えましょう
        - webpack aliases?
            - import時のfromのパスをaliasできる
    - Preact
        - 小さいReact
        - ダイナミックインポート
            - 必要なものだけインポートする
            - 通信コスト削減目的
        - 累積レイアウトシフト（CLS)
            - PropTypesで対処されている？
        - 状態管理
            - useReducer
    - オーバーラップと課題
- インスタントクリック 
- リキッドタグ
    - Forem Markdownエディター
    - LiquidはShopifyが開発
        - e.g. instagram, 
- アクセシビリティ
    - 詳細はWebAIMにて
- デバッギング
- リンティングとフォーマット
    - huskyとlint-stagedを利用している
        - git commit時にフック
- スタイル
    - scss
- Admin Guide
- Design Guide
    - 割愛
- Testing/QA Guide
    - E2E Test cypress テスト進行状況がUIで見れそう
    - Frontend Tests
        - ディレクトリ配置がrails異なる(≠spec/)
    - Accessibility Tests
    - Manual Tests
        - ngrok
            - プライベートネットワークにいい感じに接続するツールっぽい
    - Regression Testing
    - Code coverage
        - 80%

次回トップページのコードリーディング


### 2023/02/01 ドライバー：伊藤 メモ：大谷
- DeveloperGuideのTechnical Overviewを読む
- Stack
    - 知らないのがちらほら
    - 内部検索のためのランサック
    - ナビゲーションを高速化するためのTurbolinksの代わりにInstantClick 
    - 関連付けカウントを追跡するためのCounterCulture
- Architecture
    - EdgeCacheを使ってる

次回Feedから
