koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

理想のWebアプリケーションアーキテクチャ

なんか主語のデカいタイトルの記事だけれど『こういう世界観でWebアプリケーションを開発できたらいいなぁ』と思っていることがあるのでメモしておく。

同時に、これは10年以上前から思っていたことなので現代には合ってないと感じた。思考がWebアプリケーションの進化に追い付いていないのだろうと思う。

何にしてもこれを仕事に応用しようとか考えていなくて、趣味で試している程度の漠然としたものだ。

理想

コードを書いたら動く。他のあらゆる煩わしいことは気にしなくてよい。これが理想だ。

  • 唯一の言語、フレームワークで完結する
  • コードは静的に検証され、実行すれば期待通りに動く

フロントエンドはこれ、バックエンドはこれ、実行環境はこれ、のように考えどころが多いのは嫌だ。何か1つ覚えればいい状態になりたい。

動かしてみたら動きませんでした、はダルすぎるので書いたら動いてほしい。

一昔前にはSliverlight+ASP.NET、その間のインタフェースはWSDLが一つの理想形だと思っていた。要するに全てをC#で書けて型が付いている状態。自分自身この構成のアプリケーションを開発したことはないので体験が良いかは分からない。体験しない間にSilverlightWSDLは廃れてしまった。

現代ではBlazorが理想に近い構成であると感じていて、その進化には注目している*1。インタフェースを決めて、それをDIすればいいというのが好みに合ってもいる。

何よりもVisual Studio(Codeじゃないよ)でプロジェクトを開いてF5ボタンを押せばローカルマシンで実行、開発できる。Azure App Serviceにデプロイすればいい感じに本番で動くというシンプルさが良い*2。これと比べるとコンテナベースの開発、運用はまずまずシンプルになっているとは思うけれど、まだまだ考えどころが多いと思う。

C#は『実行すれば期待通りに動く』とまでは言えないだろうから理想には程遠いけれど、現実的にいい塩梅の開発体験はできるのではないかと思っている。

Rustがもっと市民権を得て、.NETくらい書きやすくなると理想に近づいたりするのだろうか? その辺は極々表層的なところしか知らない。

現実とのギャップ

この理想はモノリシックなWebアプリケーションであることが前提で、ある程度以上の開発規模への適応は難しいだろうなと思う。

要するに開発チームが分かれたらみたいな話。チームが分かれたら1つに統一されているメリットはなくなって、個別に最適化できないデメリットだけが残る。

適当に責務の境界になるインタフェースを設けて分担していけばいいのだろうけれど、それはもう次元が違う世界の話で手に負えない。

現実への落としどころ

フロントエンドはこれ、バックエンドはこれ、実行環境はこれ、のように考えどころが多いのは嫌だ。何か1つ覚えればいい状態になりたい。

理想的なマイクロサービスでは『このチームはこれを開発する』が綺麗に分けられていて、何か1つ覚えればいいになるのだろうけれど、それができている組織がどのくらい存在するのだろうか?

超大手Webサービスが無尽蔵にあるリソースで運用している『こうするとよい!』はそりゃぁいいのだろうけれど、それを適用できる、適用するといい場面はさほど多くないだろう。

身の丈に合ったアーキテクチャで開発運用するのが大事だと思っている。

もしかしたら先に書いた理想がハマる場面があるのかもしれない。というか、Blazorを採用したい場面ってそういう場面だよなと思う。

現実に落とし込んでる事例を見てみたいもんだ。

ド現実

んで現実の仕事でどうしてるのかというと、この記事では全然全くこれっぽちも触れていない感じの構成でやっている。

それもまたよし。

そのうち僕なりチームメンバーなりが発信できるといいなとは思っている。

個人的には『あるチームがこういう背景でこんな風に現実と付き合っています』って内容を共有したいのだけれど、そういう指向を持ち込みたかったらお前が発信しろって話だな。

機会と余裕*3があればまとめたいもんだ。

*1:新しめの技術にあんまり興味がないので注目してるとはいってもたまに第三者のまとめ記事を眺める程度

*2:もちろんこれはこれで考えどころはある

*3:機会はともかく余裕は常に不足している気がする

わたしとインターネット

blog.hatenablog.com

はてなインターネット文学賞「わたしとインターネット」なるものが開催されている。

身近で企画されていたものなので何となく僕とインターネットについて書いておこうと思う。

思い出

インターネットに関する思い出で一番強く記憶に残っているのは電話代だ。

もうこれだけで分かる人にはオチが見えているだろうけれど、結構ショックな出来事だったのでよく覚えている。ある種のトラウマでもある。

僕がインターネットに初めて触れたのはWindows95が普及してきたころで、その頃は学生だった。

当時のインターネット接続はパソコンにつながっているモデムから近隣のインターネットサービスプロバイダに電話をかけて行うものだった。

これには大体の場合市内通話と同じだけの電話代がかかる。3分10円とかだったのだろうか? インターネットにはまってしまうと、その分たくさん電話代がかかる。従量課金というやつ。

インターネットにはまった次の電話代はン万円になっていて、親を大層びっくりさせたものだ。

幸い理解のある親だったので、その後はテレホーダイISDNADSL光回線、と定額課金のインターネット接続手段を契約してもらってインターネットにはまり続けることができた。

ここでインターネットもうダメ! とか言われていたら今の僕はなかっただろう。

わたしとインターネット

僕にとってインターネットは空気だ。

数少ない知人との接点もインターネットだし、仕事もインターネットがないと成り立たないし、様々な意味でないと死んでしまう。

なので空気のようにそこに存在していてほしい。

みかか死した老人だって書きたいだけの記事だった。

.NET Core 3 以降で任意の言語にローカライズする

ASP.NET Core のWebアプリケーションで国際化対応したければこのドキュメントに従えばよい。

docs.microsoft.com

アクセスしてきているユーザーの言語向けの表示を行うことができる。

今回、ユーザーの言語でなく任意の言語で表示したかったのだけれど、すんなりはできなかったのでメモしておく。

  • カルチャ指定インタフェースが変化している
  • スレッド毎管理に注意する
続きを読む

まぜるな危険ライブラリ(Serilog と Microsoft.Extensions.Logging の場合)

SerilogMicrosoft.Extensions.Logging をまぜこぜで使っていたらログレベルの設定でちょっと失敗した話。

  • 背景
  • 出来事
  • 対応
続きを読む

Jekyll の Just the Docs テーマのメニューを力業でカスタマイズ

したメモ。

以前 WinHelpをMarkdownにして編集しやすくする - koudenpaのブログ したのだけれど、単にMarkdown変換しただけだと閲覧性がイマイチで、結局 chm 変換したファイルをローカルで眺めていた。

いちいちローカルでファイルを開くのが面倒くさいし、元々編集性と閲覧性を上げたくて変換したのに編集結果を眺めていないのでは目的を達成していない。

というわけで何かしらのSSGを試したかったのでMarkdownを元にWebサイトにしてみた。

  • 構成
  • Just the Docs テーマのメニューを力業でカスタマイズ
続きを読む

天ぷらわかやま

s-wakayama.com

天ぷら『わかやま』は東京の立川に本店、吉祥寺に支店がある天ぷら屋。

僕の人生で食事観が変わった出来事が1つあって、それはこの天ぷらわかやまによってもたらされた。

  • 天ぷらってこんなに旨いものなのか
  • なんでこんな記事書いた?
  • 好きなお品
    • 魚介部門
    • 野菜部門
  • 好きなエピソード
続きを読む

Visual Basic のプログラムを C# に移植してる感想 その2

3カ月ほど前に Visual Basic のプログラムを C# に移植してる感想 - koudenpaのブログ を書いた。

このSRC -Simulation RPG Construction-というスーパーロボット大戦ライクなSRPGC#(.NET)への移植はまだ趣味の時間の過半を使う形で続けている。

リポジトリを作ったころから数えると、使っている時間の波はありつつも5カ月くらいは続けていることになるだろうか? 趣味のプログラムには数カ月で飽きる自分としてはなかなか画期的な実績だ。なので感想を更新しておこうかな、と思った。

  • 動機・やってること
  • 失敗したこと
    • VBC#間の言語のギャップを埋める戦略を持たずに移植を続けた
    • 半端にリファクタリングしている
    • 失敗について
  • いい体験
続きを読む