Slide 1

Slide 1 text

Webサービス開発講座 第4回 この資料はenPiT2023向けのものです。 第3者へのリンクの配布等は 作者(@notch_man8600)を提⽰した上でお願いします (ついでに感想もいただけると私が泣いて喜びます)

Slide 2

Slide 2 text

2 DISCLAIMER ● この講座は⼤学講義レベルのプログラミング履修者が対象です ● 即座にサービスを作れる実践的なテクニックは学びません ● 本講座はPythonを中⼼に進めますが作者はPythonが嫌いです ● 本サンプルコードを実⾏したことによる、いかなる責任を作者 は負いません At your OWN risk!!

Slide 3

Slide 3 text

3 おしながき 1. 第3回の雑な説明 2. 第3回の雑な解説 3. お〇まけトーク 4. 技術選定の話(⽔曜にやる予定だった物のLT)

Slide 4

Slide 4 text

4 各種資料 [Web開発基礎講座] https://overjoyed-yew-99e.notion.site/Web-cd8dcd9eee9e46cfa5591ec e2179a4a5 [第3回notion資料] https://overjoyed-yew-99e.notion.site/3-OreChat-91d84ca65de74c82b 2d446b99fa95367

Slide 5

Slide 5 text

5 ⾃⼰紹介 クラウドソーシングサービスなどを 開発しています notch_man twitter: @notch_man8600 ● 認定スクラムマスター(CSM) ● ラボのシステム開発の全責任を負う(⾟い) ● 学類パンフに載ったけど留年したよ(笑) ● 現場で都合良く使われています [概要] ● 2020年3⽉ ⾹川⾼専卒業 ● 2021年4⽉ 筑波⼤編⼊ ● enPiT2021(受講)&2022〜(メンター) [略歴]

Slide 6

Slide 6 text

6 この講座のゴールについて 1. シンプルなWebアプリを作れるようになる 2. Webアプリケーションを作る上でのお作法を学ぶ 3. 汎⽤的なスキルとノウハウを知る 4. オレオレFWを作りたくなる気持ちになる 5. オレオレFWを安易に使うと⽕傷をすることを知る 6. 巷のFWが何故受け⼊れられたのか考えられるようになる 7. おまけ話を聞いて世間を知る ⽬標段階のレベルを定義しました。 これらいずれかを⽬指しましょう!

Slide 7

Slide 7 text

7 本⽇の⽬標:シンプルなWebアプリを作れるようになる ● コピペしたらフロントとバックエンドが動くコードを作ります ○ Pythonなので分かりやすい! ○ クリーンなコードでGPL3だから使いやすい! ● それを写経したら何かが作れます ● ちょっと弄ると⾃分らしさが出せます ● 良い感じに弄られるようになると、⾊々なサービスが作れます ○ ロジックとかで使い回せるようになると⾮常に楽になります

Slide 8

Slide 8 text

皆さんできましたか??

Slide 9

Slide 9 text

9 第2〜3回で作るもの ● OreChatというチャットサービスを作ります ○ WebSocketというイケてる(主観)技術を学べます ○ HTML+CSS+JSというシンプルな構成です ● Web開発の⼀連のお作法を学ぶことが出来ます ○ フロントエンドとは? ○ バックエンドとは? ○ Webサービスが実際に⽴ち上がるまで

Slide 10

Slide 10 text

10 Web開発のお作法 ● フロントエンド ○ 情報を提⽰するために使う ○ HTML+CSS+JavaScriptなどで記述されることが多い ○ イケてるライブラリやフレームワークとしてはReactやVueなどがある ● バックエンド ○ 定時する情報を保存するために使う ○ GoやGoやPythonやTypeScriptなどが⽤いられることが多い

Slide 11

Slide 11 text

おま〇け

Slide 12

Slide 12 text

12 あじぇんだ ● Pythonの可愛らしい点の復習 ● PythonでWebサービスを開発する上での課題整理 ● 課題に向き合うための理論チックな話 ● 課題を向き合うためのテクニック集

Slide 13

Slide 13 text

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.) 辞書を使ったルーターの様な物体

Slide 14

Slide 14 text

14 可愛らしいdictの例 ● key-valueの型が揺れる ○ 静的解析で追跡しにくい ○ ⾃由に値を書き換える ● 気軽に抽象クラスでエラーを掴んでしまう ○ エラータイプが分からん ○ passの恐ろしさ ● 無い物が⽣まれたり、あるものが無くなったり ● ありとあらゆることが⾃由にできる

Slide 15

Slide 15 text

15 私がPythonをサービス開発で使いたくない理由 ● 静的解析が効きづらい ○ 後任が苦しむ ○ バグの温床になる(静的解析はテストの1⼿法) ● エラーハンドリングが弱い ○ エラーに型があるため、基底クラスで掴みがち ○ ゆるふわにpassをするサンプルが多いため死んでしまう ● パフォーマンスが遅い ○ FastAPIとかを使うとある程度は解決できるが... ● FWがブロークンに変わる(まあ⾔語も...)

Slide 16

Slide 16 text

16 お気持ち表明 ● Pythonでサービスを作るのは⾟い ○ ⾃由が故に⾃由に翻弄され、責任は誰も負わない ● サービス開発をする上で⼼得て欲しい点 ○ 90%の⼈が分かる技術選定である ○ 直し⽅が現実的で傷跡が分かりやすいものである ○ テストや静的解析など外から傷をフォローできる ● 3年は⽣きるコードを書いてくれ!

Slide 17

Slide 17 text

17 私がPythonをサービス開発で使いたくない理由 ● サービスは⻑⽣きしてしまう ○ うっかり、作ったサービスが10年以上 ● あなたは毎年リプレイス(という名の終わらない作り直し)をやる? ● ソフトウェアの品質特性を担保するのが苦しい ○ 信頼性 ○ 保守性 ○ 機能性

Slide 18

Slide 18 text

18 ⻑⽣きさせるPythonコードを書くためのポイント ● 静的解析が効きやすいコードを書く ● ライブラリに依存しない設計にする ● ⻑く使うためのライブラリ選定 ● ⽐較的⻑⽣きするであろうソフトウェア設計 ● テストを整備する

Slide 19

Slide 19 text

Pythonを捨てよう

Slide 20

Slide 20 text

それでも

Slide 21

Slide 21 text

それでも

Slide 22

Slide 22 text

それでも

Slide 23

Slide 23 text

Python⼤好き♥

Slide 24

Slide 24 text

Python漫談

Slide 25

Slide 25 text

Pythonけものみち 〜Pythonで3年⽣かせるコードを⽬指して〜

Slide 26

Slide 26 text

26 サービス開発の⼿段として抑えて欲しい点 ● とりあえず、3年は⽣かしてくれ ○ 3年は⼤幅には壊れない技術選定 ○ メンテナンスし続けられる技術選定 ○ ブロークンに変わる可能性の低い技術選定 ● コードの中と外に頼れるものであるか? ● コードの中に頼れるか ○ コメントアウト、型宣⾔‧型ヒント、docstring ● コードの外に頼れるか ○ テスト、静的解析、フォーマッタ...

Slide 27

Slide 27 text

レガシーを克服しサービスを提供したい⼈ 現場の知⾒を得ながらものづくりをしたい⼈ 融合知能デザイン研究室に興味のある⼈ notch_man君へこっそり連絡を