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
[第4回] Webサービス開発講座
Search
notch_man
August 26, 2023
Education
0
27
[第4回] Webサービス開発講座
2023年度の筑波大学enPiTで使用した資料です。全4回+αでWeb開発の基礎を学ぶことが出来ます。
※notion資料は近日公開予定です。
notch_man
August 26, 2023
Tweet
Share
More Decks by notch_man
See All by notch_man
新人的ソフトウェアサバイバルガイド:荒野に向かい、瓦礫にぶつかり、迷子になり、広野に赴く
notchman8600
1
740
最高の開発手法、アジャイルを捨てよう
notchman8600
0
21
[第1回] Webサービス開発講座
notchman8600
0
42
[第2回] Webサービス開発講座
notchman8600
0
51
[第3回] Webサービス開発講座
notchman8600
0
60
本当に初心者目線で考えた時の技術選定の話
notchman8600
0
69
Pythonけものみち(という名のオレオレFWを作った言い訳)
notchman8600
0
21
Other Decks in Education
See All in Education
RSJ2024学術ランチョンセミナー「若手・中堅による国際化リーダーシップに向けて」資料 (河原塚)
haraduka
0
220
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
4
14k
勉強する必要ある?
mineo_matsuya
2
1.5k
Web 2.0 Patterns and Technologies - Lecture 8 - Web Technologies (1019888BNR)
signer
PRO
0
2.4k
Padlet opetuksessa
matleenalaakso
4
12k
Comezando coas redes
irocho
0
360
Lisätty todellisuus opetuksessa
matleenalaakso
1
2.3k
Evaluation Methods - Lecture 6 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
690
脳卒中になってしまった さあ、どうする
japanstrokeassociation
0
570
Chapitre_1_-__L_atmosphère_et_la_vie_-_Partie_1.pdf
bernhardsvt
0
220
Flinga
matleenalaakso
2
13k
1030
cbtlibrary
0
300
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Ruby is Unlike a Banana
tanoku
96
11k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
43
2.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Why Our Code Smells
bkeepers
PRO
334
57k
Scaling GitHub
holman
458
140k
Transcript
Webサービス開発講座 第4回 この資料はenPiT2023向けのものです。 第3者へのリンクの配布等は 作者(@notch_man8600)を提⽰した上でお願いします (ついでに感想もいただけると私が泣いて喜びます)
2 DISCLAIMER • この講座は⼤学講義レベルのプログラミング履修者が対象です • 即座にサービスを作れる実践的なテクニックは学びません • 本講座はPythonを中⼼に進めますが作者はPythonが嫌いです • 本サンプルコードを実⾏したことによる、いかなる責任を作者
は負いません At your OWN risk!!
3 おしながき 1. 第3回の雑な説明 2. 第3回の雑な解説 3. お〇まけトーク 4. 技術選定の話(⽔曜にやる予定だった物のLT)
4 各種資料 [Web開発基礎講座] https://overjoyed-yew-99e.notion.site/Web-cd8dcd9eee9e46cfa5591ec e2179a4a5 [第3回notion資料] https://overjoyed-yew-99e.notion.site/3-OreChat-91d84ca65de74c82b 2d446b99fa95367
5 ⾃⼰紹介 クラウドソーシングサービスなどを 開発しています notch_man twitter: @notch_man8600 • 認定スクラムマスター(CSM) •
ラボのシステム開発の全責任を負う(⾟い) • 学類パンフに載ったけど留年したよ(笑) • 現場で都合良く使われています [概要] • 2020年3⽉ ⾹川⾼専卒業 • 2021年4⽉ 筑波⼤編⼊ • enPiT2021(受講)&2022〜(メンター) [略歴]
6 この講座のゴールについて 1. シンプルなWebアプリを作れるようになる 2. Webアプリケーションを作る上でのお作法を学ぶ 3. 汎⽤的なスキルとノウハウを知る 4. オレオレFWを作りたくなる気持ちになる
5. オレオレFWを安易に使うと⽕傷をすることを知る 6. 巷のFWが何故受け⼊れられたのか考えられるようになる 7. おまけ話を聞いて世間を知る ⽬標段階のレベルを定義しました。 これらいずれかを⽬指しましょう!
7 本⽇の⽬標:シンプルなWebアプリを作れるようになる • コピペしたらフロントとバックエンドが動くコードを作ります ◦ Pythonなので分かりやすい! ◦ クリーンなコードでGPL3だから使いやすい! • それを写経したら何かが作れます
• ちょっと弄ると⾃分らしさが出せます • 良い感じに弄られるようになると、⾊々なサービスが作れます ◦ ロジックとかで使い回せるようになると⾮常に楽になります
皆さんできましたか??
9 第2〜3回で作るもの • OreChatというチャットサービスを作ります ◦ WebSocketというイケてる(主観)技術を学べます ◦ HTML+CSS+JSというシンプルな構成です • Web開発の⼀連のお作法を学ぶことが出来ます
◦ フロントエンドとは? ◦ バックエンドとは? ◦ Webサービスが実際に⽴ち上がるまで
10 Web開発のお作法 • フロントエンド ◦ 情報を提⽰するために使う ◦ HTML+CSS+JavaScriptなどで記述されることが多い ◦ イケてるライブラリやフレームワークとしてはReactやVueなどがある
• バックエンド ◦ 定時する情報を保存するために使う ◦ GoやGoやPythonやTypeScriptなどが⽤いられることが多い
おま〇け
12 あじぇんだ • Pythonの可愛らしい点の復習 • PythonでWebサービスを開発する上での課題整理 • 課題に向き合うための理論チックな話 • 課題を向き合うためのテクニック集
13 可愛らしいdictの例 request = { "data": 1, "user_id": "example-user-id", "password":
"password", "method": "add", } router = { "/add": lambda a, b: a + b, "/sub": lambda a, b: a - b, } if "method" in request: print(router[request["method"]](request["data"], 2)) try: print(request["1"]) # もしパスワードカラムみたいなものがあったら削除しよう request.pop("password") except Exception as e: pass print(request["user_id"]) ex.) 辞書を使ったルーターの様な物体
14 可愛らしいdictの例 • key-valueの型が揺れる ◦ 静的解析で追跡しにくい ◦ ⾃由に値を書き換える • 気軽に抽象クラスでエラーを掴んでしまう
◦ エラータイプが分からん ◦ passの恐ろしさ • 無い物が⽣まれたり、あるものが無くなったり • ありとあらゆることが⾃由にできる
15 私がPythonをサービス開発で使いたくない理由 • 静的解析が効きづらい ◦ 後任が苦しむ ◦ バグの温床になる(静的解析はテストの1⼿法) • エラーハンドリングが弱い
◦ エラーに型があるため、基底クラスで掴みがち ◦ ゆるふわにpassをするサンプルが多いため死んでしまう • パフォーマンスが遅い ◦ FastAPIとかを使うとある程度は解決できるが... • FWがブロークンに変わる(まあ⾔語も...)
16 お気持ち表明 • Pythonでサービスを作るのは⾟い ◦ ⾃由が故に⾃由に翻弄され、責任は誰も負わない • サービス開発をする上で⼼得て欲しい点 ◦ 90%の⼈が分かる技術選定である
◦ 直し⽅が現実的で傷跡が分かりやすいものである ◦ テストや静的解析など外から傷をフォローできる • 3年は⽣きるコードを書いてくれ!
17 私がPythonをサービス開発で使いたくない理由 • サービスは⻑⽣きしてしまう ◦ うっかり、作ったサービスが10年以上 • あなたは毎年リプレイス(という名の終わらない作り直し)をやる? • ソフトウェアの品質特性を担保するのが苦しい
◦ 信頼性 ◦ 保守性 ◦ 機能性
18 ⻑⽣きさせるPythonコードを書くためのポイント • 静的解析が効きやすいコードを書く • ライブラリに依存しない設計にする • ⻑く使うためのライブラリ選定 • ⽐較的⻑⽣きするであろうソフトウェア設計
• テストを整備する
Pythonを捨てよう
それでも
それでも
それでも
Python⼤好き♥
Python漫談
Pythonけものみち 〜Pythonで3年⽣かせるコードを⽬指して〜
26 サービス開発の⼿段として抑えて欲しい点 • とりあえず、3年は⽣かしてくれ ◦ 3年は⼤幅には壊れない技術選定 ◦ メンテナンスし続けられる技術選定 ◦ ブロークンに変わる可能性の低い技術選定
• コードの中と外に頼れるものであるか? • コードの中に頼れるか ◦ コメントアウト、型宣⾔‧型ヒント、docstring • コードの外に頼れるか ◦ テスト、静的解析、フォーマッタ...
レガシーを克服しサービスを提供したい⼈ 現場の知⾒を得ながらものづくりをしたい⼈ 融合知能デザイン研究室に興味のある⼈ notch_man君へこっそり連絡を