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
もしも、社内標準言語がBASHに統一されたら
Search
Kentaro Hayashi
August 10, 2020
Programming
1
53
もしも、社内標準言語がBASHに統一されたら
https://moshi-bash-slide.netlify.app/
Kentaro Hayashi
August 10, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
20260315 AWSなんもわからん🥲
chiilog
2
160
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
520
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
0
300
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
160
Claude Code Skill入門
mayahoney
0
400
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8.2k
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
640
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
150
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
230
ロボットのための工場に灯りは要らない
watany
11
3k
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.1k
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Chasing Engaging Ingredients in Design
codingconduct
0
140
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Un-Boring Meetings
codingconduct
0
230
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
110
So, you think you're a good person
axbom
PRO
2
2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
Making the Leap to Tech Lead
cromwellryan
135
9.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
160
Transcript
もしも、社内標準⾔ 語が BASH に統⼀さ れたら
はじめに
Bash でいいものを作ったので⾃慢しに来まし た 将来なにかの間違いで社内標準⾔語がBash に 統⼀されたら⼤変ですよね。その時になって 慌てないよう、Bash ⼒を鍛えておきましょ う。
BASH とは Bourne Shell のフリーソフトウェアによる代替 版。Bourne-again shell の頭⽂字 1989 年⽣まれ
ヒストリ機能や補完機能を持っている 近年のLinux 等で標準のシェルとして使われて いる。 sh に⽐べたらナウい
きっかけは NETCAT netcat と組み合わせればワンライナーでサーバを⽴ てることができる。 コマンドを叩けば、標準⼊出⼒が socket と繋がる。 while true;
\ do { echo -e 'HTTP/1.1 200 OK\r\n'; cat test.sh; } |\ nc -l 8080; done
ものたりない
もっと複雑な事がしたい
netcat をそのまま使っても、リクエストを解析して レスポンスを返すみたいなことができない。この ままだと複雑なことができなくて悲しい。 ⼀部の安全でないnetcat では オプション という ものがあるらしい。これを使えばbash に処理を⼀
任できそう。
しかしデフォルトで⼊っているnc コマンドには がなかった・・・。
GNU NETCAT ならいけそう
⼊れてみる これを使えば、bash だけでWeb サーバ作れるんじゃ ね? bash 縛りとか楽しそう。 $ brew install
netcat # GNU netcat $ netcat -lp 8080 -e /bin/bash hoge.sh # 良 $ netcat -lp 8080 -e /bin/bash
BASH 縛り WEB サーバの構想 どこまで厳密な意味でbash 縛りとする か・・・ ビルトインコマンド限定? cat やsed
はあり? awk はあり? listen するためにnetcat 使うのずるくない?
検証
BASH だけで LISTEN できるのか? にアクセスす れば、こちらからコネクションを張ることは できるらしい bash でTCP 通信
でもlisten はできない
結論(縛りプレイのルール)
ルール 1 bash はシステムにデフォルトで⼊っているバージ ョンを使⽤する
ルール 2 標準で使えるコマンドはだいたい使⽤可能 ↑ ただ し、「プログラミング⾔語」に属するものはNG (awk やperl はNG )
ルール 3 TCP でlisten するために他のシンプルなコマンド (nc など)に頼るのはOK (でもhttpd とかはズルい のでダメ)
ルール 4 bash で書かれたライブラリは使ってもOK (結局テ ンプレートエンジンしか使わなかったけど)
更に⼟⽇の頑張りを経て
良いものができました https://github.com/kentaro-hayashi/bashweb
実演
実装してみて感じた細かいこと
bash はweb に向いていない 世間のフレームワークの素晴らしさを知った Controller とView とRouting の実装までして疲れ たので、model(ORM) は⼿を付けなかった
【⾟み】bash の関数は値を返せない 返せるんだけど終了コードのみ これは関数というよりサブルーチン 参照渡しはできなくない 関数を別の変数に代⼊するのはできる☺
【⾟み】bash のバージョンが古いので連想配 列がない 連想配列がないので⿊魔術のような記法 に・・・ 【⾟み】関数のスコープはグローバルスコー プ 【⾟み】上位スコープでreadonly として宣⾔さ れた変数名は下位のローカルスコープで再定
義できない
【⾟み】PASH を間違えて書き換えてハマった 【⾟み】read コマンドは改⾏を待ち受けるの で、改⾏で終わらないリクエストのときは待 ちぼうける 【⾟み】配列の扱い(意外とファイルを1 ⾏ず つ配列に⼊れるのは⾯倒くさい)
変数展開機能、知らなかった 【⾟み】サブシェルが起動してしまうと変数 を定義しても無駄になるので注意(しかも発 動条件がわかりにくい) シェルの変数展開 bash で,サブシェルが起動される条件
連続したリクエストを受信する と CONNECTION がはれない問題
静的な画像ファイルの配信にも対応させて、ウキ ウキしながらHTML 中にimg タグを書いた。
しかし、画像が表⽰されない。
画像取得時にTCP Connection がはれていないのが原 因でした。
netcat を使った既存の仕組みはこう。
これだと、なにかのリクエストを処理している間 は他のリクエストに返事ができない。 (accept できないのでガン無視状態)
よくあるサーバプロセスなどはこんな感じだと思 うけれど、netcat はそういうふうにできていない。
NETCAT から TCPSERVER に乗り 換えました
tcpserver (D.J.Bernstein )ならちゃんとaccept 後に fork してくれる。 http://cr.yp.to/
ようやく写真を表⽰することができました
結び
サーバ書くと勉強になる 意外と楽しい 今度はもっと低いレイヤーからチャレンジし ても良いかも
完