Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
twitter-cloneを作った話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ogata Katsuya
November 12, 2024
91
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
twitter-cloneを作った話
Ogata Katsuya
November 12, 2024
More Decks by Ogata Katsuya
See All by Ogata Katsuya
ML基盤構築インターン最終発表 ~k8s カスタムスケジューラ~ / ML platform internship final presentation
ogatakatsuya
0
55
【初心者向け勉強会#9】MLOpsの基本 ~構築から運用まで~ / MLOps Basics: From Development to Operations
ogatakatsuya
1
190
Defensive LLM Calling
ogatakatsuya
0
220
AIで加速する文化祭ソフトウェア開発 / Software Development for School Festivals Accelerated by AI
ogatakatsuya
0
62
Vibe-Coding で作ったアプリを 文化祭で運用した話 / The story of running an app I built with Vibe-Coding at a school festival
ogatakatsuya
1
200
ハッカソンの勘所とエンジニアリングへの活かし方 / What Hackathons Teach Us and How to Bring That into Engineering
ogatakatsuya
0
72
Kubernetesで分散処理をやってみる-Kafkaを添えて-
ogatakatsuya
0
260
ソフトウェアアーキテクチャ入門 / Introduction to Software Architecture
ogatakatsuya
2
200
大学のサークルプラットフォームを作った話
ogatakatsuya
0
150
Featured
See All Featured
Abbi's Birthday
coloredviolet
3
8.2k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Docker and Python
trallard
47
3.9k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
980
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
From π to Pie charts
rasagy
0
220
The Language of Interfaces
destraynor
162
27k
The Limits of Empathy - UXLibs8
cassininazir
1
370
Marketing to machines
jonoalderson
1
5.5k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
150
Transcript
インターン成果発表 緒方 克哉 1
2 自己紹介 名前 : 緒方 克哉(おがた かつや) 出身 : 宮崎県小林市
所属 : 大阪大学 基礎工学部 情報科学学科 B3 趣味 : 登山 旅行 サウナ 屋久島登山 地元小林市 ブルネイのビーチ
3 大事にしたい価値観 ・謙虚 ・努力 ・おもしろい ・成長 ・躍動的な・ワクワクする ・行動 ・心の平穏
インターンでやったこと • X(旧Twitter)クローンの作成 • 環境構築から実装する機能選定 • 機能の設計 • 機能の実装 •
ユニットテスト・APIテスト作成 • CIの実装 • AWSへのデプロイ • CDの実装 4
5 機能一覧 ・認証機能 ・ツイート機能 ・リプライ機能 ・フォロー機能 ・いいね機能 ・プロフィール機能 ・プロフィール編集 ・画像アップロード
デモ 6
7 使用技術(開発環境)
8 DB設計
9 API設計
10 フロントエンド • 工夫点 • コンポーネントに分割 • レンダリングをコンポーネント単位で行う • フロントエンドにNext.jsを用いてできるだけリアクティブな使いやす
いUIを実装 • 改善点 • ロジックの部分の設計が甘かったせいで、投稿を行った時に投稿を保 持している変数が別のコンポーネントにあるため、変数のバケツリレ ーを行う必要がある(もしくは更新を行えない) • ロジック部分とビューが同じファイルの中にあるので可読性が低い • ユースケースとしてスマートフォンからのアクセスも考えられるが、 レスポンシブ対応できなかった
11 バックエンド • 工夫点 • スキーマを積極的に用いることで可読性を上げる努力をした • Pythonだけど、できるだけ型(annotation)をつけた • コントローラーの部分とリポジトリ(主にdbとのやり取り)を分
離すること、責務の分離を実現 • これのおかげでテストも書きやすかった • 改善点 • swaggerUIを自動生成できるので設計の段階でしっかりと詰めて おけば、API設計とスキーマを決めてもっと開発スピードを上げれ た気がする(スキーマ駆動開発) • バックエンドのアーキテクチャについてもう少し学ぶ必要がある
12 ユニットテスト ・Pytestを利用 ・mockを用いて既存のDBに影響しないように配慮 ・parametrizeを用いてテスト関数を共通化 ・テストのベストプラクティス ・関数の命名法(関数名_状態_結果) ・AAA(Arange-Act-Assert)
13 APIテスト ・テストの前後のセットアップ (fixture)でテスト用のDBを用意し てAPIテストを実施 ・AsyncSessionクラスを継承し、 commitを行わないように工夫 ・DI(Dependency Injection)を用いて いたので、元のdbをoverrideしてテス
ト用dbを用いることができる!
14 CI ・PR作成時に自動でテストが 行われるようにGitHub Actions を用いてCIを実装 ・テスト終了後にテストが落ち ていないか、全て通過していた らカバレッジがPRのコメント に表示される
15 AWSアーキテクチャ(設計段階)
16 AWSアーキテクチャ
CD • AWS CodePipelineと AWS CodeDeployを利 用して実現 • GitHubのmainブランチ にpushしたら実行
• appspec.yml内の操作 を自動で実行 • systemdを用いてEC2 の再起動時も自動でサ ーバー起動 17 appspec.yml
18 気づき・今後に向けて ・タスク管理・スケジュール管理が杜撰だったので、設計 段階でタスク・スケジュールをドキュメントに起こす。 ・設計段階で細かい部分まで設計を行うべきだった。今回 の実装で重要な点がわかったので、それを活かす。 ・早い段階で、設計のレビューをもらうべきだった。設計 の重要さがわかったので、慎重に設計を行う。 ・インフラの知識があれば最初にデプロイしておけばよか った。
19 反省