シェル芸オンラインジャッジ:システム全体をDockerコンテナ内で動かす

はじめに シェル芸オンラインジャッジというウェブサイトを開発しています。 今回はフロントエンドとバックエンドをDockerコンテナ内で動かすように変更しました。 nginxもコンテナ内で動かしています。 シェル芸オンラインジャッジ 修正方法について シェル芸オンラインジャッジのソースコードを丸ごとGeminiに渡して、 具体的に修正方法を聞いて修正しました。 今回はDockerfileやdocker-compose.yml、nginxのconfファイルなどについて教えてもらいました。 シェル芸オンラインジャッジのシステム構成図 Nano Banana Proに生成してもらった現状のシステム構成図です。 システム構成 Dockerfile Frontend 下記がフロントエンドのDockerfileです。 主にフロントエンド側のビルドとnginxの設定・起動を行っています。 問題データのファイルもコンテナ内にコピーしています。 # --- Build Stage --- FROM node:22 AS builder WORKDIR /app COPY frontend/package.json frontend/yarn.lock* ./ RUN yarn install --frozen-lockfile COPY frontend/ ./ RUN yarn build # --- Serve Stage --- FROM nginx:alpine # ビルド成果物をNginxの公開ディレクトリにコピー COPY --from=builder /app/build /usr/share/nginx/html # 問題データを公開ディレクトリにコピー COPY problems/ /usr/share/nginx/html/ # Nginx設定ファイルをコピー COPY frontend/nginx/default.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] nginxの設定ファイルはあらかじめ用意しておいてコンテナ内へコピーします。 一応80番ポートの設定を書いていますが、実際は443ポートだけ受け付けます。 ...

作成日: 2026年2月1日 · Yusuke Kato

Dockerコンテナのリソースの制限を設定【シェル芸オンラインジャッジ】

はじめに シェル芸オンラインジャッジというウェブサイトを開発しています。 今回はユーザが入力したコマンドを実行するDockerコンテナにメモリやCPUなどのリソースの制限を設定しました。 シェル芸オンラインジャッジ 設定内容 設定前 Pythonスクリプトからコンテナを実行しています。 元々はネットワークの制限だけ設定していました。 container = self.client.containers.run( self.image_id, detach=True, command="sleep 60", ipc_mode="none", network_mode="none", ) 設定後 メモリ、CPU、プロセス数、権限、データサイズの制限を設定しました。 container = self.client.containers.run( self.image_id, detach=True, command="sleep 60", ipc_mode="none", network_mode="none", mem_limit="512m", # メモリ制限 memswap_limit="512m", # スワップ制限 nano_cpus=500000000, # CPU使用率制限 (0.5 CPU) pids_limit=50, # 最大プロセス数制限 cap_drop=["ALL"], # 権限制限 tmpfs={"/media": "size=100M"}, ulimits=[ # fsize (file size): 1プロセスが作成できる最大ファイルサイズ(バイト単位) docker.types.Ulimit(name="fsize", soft=50000000, hard=50000000) ], ) 設定の動作確認 設定が正しく行われているか確認してみます。 ...

作成日: 2026年1月31日 · Yusuke Kato

Google AI Studioで自作のウェブサイトの改善点を教えてもらった

はじめに 私が運営しているシェル芸オンラインジャッジというウェブサイトはまだまだ改善点があります。自分で一つ一つ改善していくのももちろん良いですが、最近の生成AIは私よりもはるかに優秀なので改善してもらえるところはしてもらおうと思い立ちました。 シェル芸オンラインジャッジ 使ったもの Google AI Studio Geminiにリポジトリ丸ごと読み込んで改善点を教えてほしいとお願いしたら、Google AI Studioを使うといいよと教えてくれました。ということで使ってみます。 Google AI Studio Gitingest Google AI Studioにリポジトリを丸ごと渡そうと思ったのですが、 ファイル一つずつしか渡せなさそうだったので、 GitingestというサービスにGitHubリポジトリURLを入力することで、 一つのファイルにまとめてもらいました。 とても便利です。 Gitingest プロンプト Google AI Studioに下記のように入力しました。 プロンプトのセオリーはよく分かっておらず、 かなり雑なお願いの仕方ですが、 Google AI Studioはいい感じに改善案を列挙してくれました。 アップロードしたファイルは私が開発しているシェル芸オンラインジャッジというウェブサービスのソースコードです。react,fastapi,docker,nginxなどを使っています。ユーザがブラウザから入力したシェルのコマンドをサーバのdockerコンテナ上で実行して、実行結果をユーザへ返すサービスです。改善案を考えてほしいです。候補として、セキュリティ、システム構成、パフォーマンス向上、問題データの形式と扱い方(現状テキストファイルで保持、テキストファイルをそのまま取得している)、リファクタリングなどです。その他にも改善案があれば教えてほしいです。 改善案 Google AI Studioの出力をそのまま載せるととても長くなるので箇条書きしておきます。 セキュリティ コンテナ起動時にCPUやメモリなどのリソースの制限を設定したほうがよい コンテナ内でコマンドを実行するユーザ権限を変更したほうがよい コンテナ内でネットワーク遮断の設定をさらに強化したほうがよい パフォーマンス向上 ユーザからのリクエストをキューに入れて順番に実行したほうがよい コンテナの起動に時間がかかるのであらかじめ起動しておいて待機させておくとよい データベースを導入してログを管理したほうがよい 問題データの管理 JSON形式で問題データを管理してAPI経由で取得するとよい リファクタリング 本番環境とローカル環境でURLを手動で書き換えているが設定ファイルを別で用意したほうがよい App.tsxでStateを使い過ぎているので対応が必要 判定処理 画像比較は完全一致だと安定しないのでcompareコマンドなどで類似度を基準にしたほうがよい 文字列末尾の空白や改行の削除はrstrip()を使ったほうがよい その他 docker-composeでローカルの開発環境を起動できるとよい GitHub Actionsから直接デプロイできるとよい SNSへのシェア機能があるとユーザ同士の交流が増えてよい この後 さらに詳しく修正案を聞いて修正していこうと思います。 おわりに 今回はシェル芸オンラインジャッジの改善案をGoogle AI Studioに聞いてみました。 たくさん改善案を出してもらえたので対応していきたいと思います。 便利な世の中になりましたね。 それでは、また。

作成日: 2026年1月30日 · Yusuke Kato

読書日記:山崎ナオコーラ『人のセックスを笑うな』(河出文庫)

はじめに 山崎ナオコーラの『人のセックスを笑うな』を読みました。 2004年に文藝賞を受賞してデビュー作となった作品とのことです。 久しぶりにちゃんと小説を読んだのですが、 「やっぱり小説っておもしろいな」と実感できました。 感想を記録として残しておきます。 人のセックスを笑うな 下記リンクが公式サイトです。 河出書房新社 - 人のセックスを笑うな 感想 本作品は、美術の専門学校に通う19歳の主人公・磯貝と、 その学校で講師をやっている39歳のユリとの恋愛を描いた小説です。 主人公の視点を通してリアルな恋愛が淡々と描かれていて、 一つの人生を体験できたような感覚があります。 磯貝とユリの関係性は世間的に歪んでいるわけですが、 本作品ではそこを主題にしているわけでなく、 あくまで磯貝とユリの関係を一つの恋愛の形として、その始まりから終わりまでを語っています。 解説でも説明されていますが、 本作品では主人公が何か大きな葛藤を抱えていてそれを乗り越えるところを描いているわけでもなく、 作品全体を通して恋愛についてのテーマに対して答えを示そうとしているわけでもなく、 ただひたすらに二人の人間のリアルな恋愛を描こうとしていると思います。 そして、ハッピーエンドやバッドエンドなどの明確な終わり方をするわけではないところや、 聖人のような良い人や地獄のような嫌な人が出てくるわけでもないところもリアルさがあります(友人の堂本はかなりいい奴です)。 リアルさがあればあるほどおもしろいということではないですが、 フィクションの中にリアルさを詰め込むというのはとても難しいことで、 そもそもやろうとしてできることではないと思います。 フィクションだけどもしそういう世界があったらこういうことが起きるとか、 人間はこういう考えをしてこういう行動をとるとかを具体的に描けるのかどうかが作品を作る上での一つ重要なところになって、おもしろさに繋がると思っています。 主人公の心の動きやユリの言動などがフィクションでありながらリアルさも併せ持っているところが本作品のおもしろさなのかと思いました。 良い作品でした。 おわりに 今回は山崎ナオコーラの『人のセックスを笑うな』を読みました。 久しぶりに小説を読んでとても楽しめたので良かったです。 小説に限らずですが本はたくさん読んでいきたいですね。 それでは、また。

作成日: 2026年1月27日 · Yusuke Kato

【VRChat】UnityとBlenderでアバターのパーツを作る

はじめに 今回はVRChatのアバターの手を既存モデルをベースに自作してみようと思います。 使用ソフトはもちろんBlenderです。 モデリングは、Blenderをほんの少し触ったことがあるのと、 あとはCADソフトを少し触ったことがあるくらいの初心者です。 分からないことがたくさんあるのでインターネットで調べたりGeminiに聞いたりしながら作業を進めました。 結果としてひとまずVRChat上で動く状態までできました。 この記事では作成手順を記録していきます。 GIF画像↓ 手の動作確認 YouTube↓ ## 開発環境 開発環境は下記の通りです。 バージョンが異なると同じように動かない場合があります。 Windows 11 Blender 5.0 Unity 2022.3.22f1 VRChat SDK 3.10.1 使用アバター アバターはニコニコのアリシア・ソリッドの3Dモデルを使用しています。 アリシア・ソリッド公式サイト VRChatで使用する方法は下記の記事にまとめています。 公開されているVRMモデルをVRChatで動かす Blenderをインストール オープンソースの3DモデリングソフトであるBlenderをインストールします。 Blenderの公式サイト Blenderにアバターのモデルデータをインポート 追記:最初はFBX形式のモデルをインポートしましたが、ボーン(アーマチュア)が正しく読み込めなかったので、VRM形式のモデルをインポートしました。 VRM形式のモデルは後述するアドオンを入れることでインポートできます。 アリシア・ソリッドの3DモデルはFBX形式(本当はVRM形式)のファイルで取得できたので、 Blenderを開いてからファイル > インポート > FBXを選択して読み込みます。 インポート インポートに成功するとBlender画面上にアバターのモデルが表示されます。 モデルをインポート 手のパーツだけモデルから切り分ける アリシア・ソリッドの3Dモデルは身体全体が一つのオブジェクトになっているので、自作する手の部分だけ切り分けます。 まず体の部分をクリックして選択してTABキーを押して編集モードに切り替えます。 すると下記の画像のようにメッシュ(三角形の網目)が確認できます。 メッシュ 次に手のメッシュの頂点をどれか一つクリックして選択してからLキーを押すと手の部分全体を選択できます。 オブジェクトとしては身体全体がひとまとまりになっていますが、 メッシュとしては各パーツでちゃんと分かれているようです。 手全体を選択 次にPキーを押すと「分離」ウィンドウが表示されるので「選択」をクリックして選択した手のパーツを体全体から分離します。 分離 分離が成功すると画面右上のオブジェクトの一覧に元々あった体全体の「body」から手のパーツが「body.001」という名前で分離していることが確認できます。 ...

作成日: 2026年1月11日 · Yusuke Kato

ELDEN RING BLOG 10: DLCをクリアしました!

はじめに 概要 2022年2月25日に発売されたフロムソフトウェアの『ELDEN RING』(以下、エルデンリング)を今更ながら初見でプレイしています。 今回でようやくDLCのラスボス、ラダーンとミケラを倒せました。 これでひとまずエルデンリングのブログも最終回です。 ELDEN RING 公式サイト 下記が今作の公式サイトのリンクです。 ELDEN RINGの公式サイト 前回の記事 2025年9月28日の日記です。 ELDEN RING BLOG 9: DLCに挑戦した 注意事項 まだELDEN RINGをプレイしていない方は、ネタバレになってしまうのでご注意ください。 本日の冒険の記録 ラダーンとミケラ 一年ぶりくらいにラダーンとミケラに再開しました。 ラダーンとミケラ 約束の王ラダーンを倒した ようやくラダーンとミケラを倒しました。 本当はずっと愛用していた巨人砕きで倒したかったのですが、 そのままずっと倒せず放置してしまっていたので、 今回は攻略サイトを見て血の蟻棘のレイピアと指紋石の盾で倒しました。 下記の攻略サイトを参考にさせていただきました。 GameWith - 【エルデンリング】約束の王ラダーンの攻略とNPC召喚方法|ラスボス【DLC】 出血や腐敗ダメージを狙っていくとよいとのことでしたが、 単純に盾構えながらチクチク攻撃できるので、 ラダーンの攻撃を避ける必要もなくあっさり倒せました。 ちなみに私は180レベルまで上げていて、 筋力と技量を50~60まで上げられて(レラナのところでステータスを振り直しました)、 ダメージの通りがかなりよかったです。 ラダーン倒した ダークソウルの頃から筋力上げてデカい武器で戦ってきましたが、 もっといろいろな戦い方で遊んでも楽しそうだなと思ってきています。 ミケラの回想 ラダーンを倒した後、光に触れるとミケラの回想が見れました。 ミケラはラダーンこそが王だと信じていたという感じですよね。 久しぶり過ぎてストーリーがあまり記憶にないですが、 ミケラとラダーン、あとはマレニアは複雑な関係そうです。 ミケラの回想1 ミケラは男性だと思っていましたが、見た目はかなり女性です。 そもそも神的な存在なので性別は関係ないのかもしれません。 マリカとラダゴンも見た目は女性と男性になっていたのでそうなのだと思います。 ミケラの回想2 最後の写真 ということで本編とDLCをクリアした姿です。 ラダーンの防具がお気に入りです。 クリア ...

作成日: 2026年1月10日 · Yusuke Kato

我が家のインコ「れもん&ぽぽ&ぐぐ&さん」の日記24 : 2026年もよろしくお願いします

新年のご挨拶 2026年もよろしくお願いいたします。 短いですが挨拶だけ書かせていただきます(ブログのテストも兼ねて)。 れもんのごはん中の写真↓ ごはんを食べるれもん

作成日: 2026年1月4日 · Yusuke Kato

VRChatのワールド「森の中のログハウス」をUnityで作成してアップロードするまで

はじめに VRChatのワールドを本格的に作ってみたので作成の流れを記録として残しておきます。 これからワールドを作成する方の参考になれば幸いです。 ちなみに「本格的」とは言っても私の中での本格的なので凝ったワールドを作ったわけではありません。 作成したワールド 作成したワールドは「森の中のログハウス / Log Cabin in the Forest」です。 現在はCommunity Labsで公開している状態なのでVRChat上で検索すれば出てくるはずです。 よろしければぜひ。 ワールド リスポーン地点はこんな感じです。 森の中からスタートで橋があります。 ※木や草などの3DモデルデータはUnityのAsset Storeから入手しています(後述) リスポーン地点 森の中の小道を進んでいきます。 小道 小道を進むとログハウスがあります。 ※ログハウスの3DモデルデータはBoothにて購入したものを使用しています(後述) ログハウス ログハウスの中は広めです。 ログハウスの中 ロフトもあって住み心地が良いです。 ロフト 以上がざっくりとしたワールドの説明です。 開発環境 開発環境は下記の通りです。 UnityやVRChat SDKのバージョンが異なると同じように動かない場合があります。 Windows 11 Unity 2022.3.22f1 VRChat SDK 3.10.1 ワールドプロジェクトの作成 それではさっそくワールドを作っていきます。 まずはVCCかALCOMでワールド用のUnityプロジェクトを作成します。 プロジェクトの作成方法は特に難しいことはないので説明を省略しますが、 VCCやALCOMについては下記の記事に書いていますので参照ください。 またはVRChatのワールド作成方法を検索すれば情報がたくさん出てきます。 公開されているVRMモデルをVRChatで動かす ワールドで使用する3Dモデルデータを入手する 今回の「森の中のログハウス」のワールドを作成するためには最低でも「森」と「ログハウス」の3Dモデルデータが必要になります。 3DモデルデータはBlender等のモデリングソフトを使って自作することももちろんできるわけですが、 私はモデリングができないので公開or販売されているデータを使っていこうと思います。 まず「森」の3DモデルデータはUnity公式のAsset Storeから入手しました。 今回のワールドではPolytope Studio様の「Lowpoly Environment」を使用させていただきました。 ...

作成日: 2025年12月30日 · Yusuke Kato

読書日記:プジェ日記を読みました!

はじめに KADOKAWAより出版されている谷小夏先生の『プジェ日記! 幸せを運ぶインコのみっちゃん』を読みました。 元々X(旧Twitter)でも読ませていただいていて好きな漫画だった作品が書籍になったということでさっそく手に入れました。 我が家でもインコを飼っているので共感する部分も多くておもしろかったです。 とても良い作品なのでインコやペットを飼っている方に特におすすめです。 プジェ日記 下記リンクが公式サイトです。 KADOKAWAオフィシャルサイト:プジェ日記! 幸せを運ぶインコのみっちゃん 感想 インコを飼っているとこういうことあるよな~ということが漫画でおもしろおかしく描かれていてとても優しい気持ちになれる作品でした。 我が家のセキセイインコのれもんも指には乗ってきますが触ろうとすると怒って噛んできたり、スマホを触っていると画面をコツコツ叩いたりしてきます。 もちろんインコ一人ひとり個性があって同じインコはいないわけですが、その中でも共通点があることが分かってよかったです。 あとは漫画の作品として素晴らしいと思います。 みっちゃんさんとご家族の方々との日常の切り取り方がとてもよくて、最初から最後までおもしろかったです。 谷小夏先生の日常の中からおもしろいところを見つける能力とそれを漫画で表現できる能力による素晴らしい作品だと思います。 インコに限らずペットを飼っている方にぜひ読んでいただきたいです。 個人的に一番共感したのはペットととの記録を残したいという気持ちでした。 私も実家でチワワを飼っていました。 今は亡くなってしまいましたが、写真を残していたことで思い出を振り返ることができます。 現在我が家にいるインコたちとの記録はブログに記録を残すようにしています。 写真だけよりも文章が一緒に記録として残っているほうがその時を思い出しやすい気がします。 また、自分の頭の中の記憶は思ったよりもあやふやだなと考えているので、なるべく写真だったり文章だったりで残しておきたいという感じです。 谷小夏先生はその記録を漫画という形で残されていてすごいな~という思いです。 漫画だと谷小夏先生やご家族の方々、そして何よりみっちゃんさんの思いや動きが伝わりやすいと思います。 私は絵が下手なので漫画は描けませんが、その代わりブログで文章と写真を通して引き続きインコたちとの記録を残せたらと思います。 おわりに 今回は谷小夏先生のプジェ日記を読んだ感想を書きました。 とても素晴らしい作品なのでおすすめです。 私も引き続きインコたちとの生活を楽しみつつ、記録を残していけたらと思います。 最後に、私も日記を書いているので宣伝みたいになりますがリンクを置いておきます。 我が家のインコ「れもん&ぽぽ&ぐぐ&さん」の日記23 : 2025年の我が家のインコ それでは、また。

作成日: 2025年12月30日 · Yusuke Kato

我が家のインコ「れもん&ぽぽ&ぐぐ&さん」の日記23 : 2025年の我が家のインコ

はじめに 2025年も終わりが近づいてきました。 インコ日記を全然更新できていませんでしたが、 我が家のインコたちは元気に過ごしてくれています。 年末最後に記録を残しておこうと思います。 関連記事 前回の日記 2025年7月27日の日記です。 我が家のインコ「れもん&ぽぽ&ぐぐ&さん」の日記22 : 我が家にさんちゃんがやってきた 我が家におけるインコの飼育方法 2024年の我が家でのインコの飼育方法をまとめました。 インコの飼い方と注意点(2024年版) 注意点 私たちは鳥を初めて飼うため飼育方法に誤りがあるかもしれません。 これからセキセイインコやズグロシロハラインコなどを飼うという方はこのブログの情報を鵜呑みにせず、参考程度に読んでいただけますと幸いです。 いかなる場合でも責任は負えませんのでご了承ください。 今週のインコ れもん セキセイインコのれもんはいつも通り元気です。 我が家で一番飛ぶのが上手で部屋の中を縦横無尽に飛び回っています。 自由落下みたいなヒヤッとする飛び方もして心配になる時もあるので、 油断はしないでほしいなと思っています。 れもんはスマホを向けるとスマホの上に必ず飛び乗ってくるので写真を撮るのも一苦労です。 一瞬の隙をついて激写する技を身に付けました。 まだまだ百発百中というわけではないので今後も腕を磨いていきたいです。 ちなみに床で輪投げのおもちゃで遊ぶのも好きです。 れもん ぐぐ ズグロシロハラインコのぐぐも元気です。 我が家で一番大きくて嚙む力も強いです。 ぐぐはじゃれているつもりかもしれませんが、 人間の指に穴を開ける勢いで噛んでくるので注意が必要です。 甘噛みの時も多いので油断しているとちゃんと穴が開きます。 ぐぐは家に来た時は鳥籠から出てこないくらいの怖がりでしたが、 今や人間に撫でられるのも好きだし、 人間の指に絡みつくくらいの甘えん坊でもあります。 ひっくり返って寝っ転がったりもするので、 最近は本当に鳥なのか怪しんでいます。 ぐぐ さん オカメインコのさんちゃんも我が家に慣れてきました。 元々は羽がクリッピングされていたのですが、 最近は羽が生え変わってジャンプできるようになったところから始まり、 ついに飛べるようにもなってきました。 とはいえまだちゃんと羽が生えていないので、 飛び方が不安定でかなり心配です。 棚とかテレビとかと壁の間に入ってしまうと危険なので注意したいです。 さんちゃんはお店では「好奇心旺盛で肝も据わっている」という感じで紹介していただいたのですが、 意外とビビりでおもちゃも怖がって近づかないし、ちょっと大きい音がしただけでパニックになったりしてしまいます。 もう少しいろいろ慣れていってくれたら嬉しいなと思っています。 あとは最近は反抗期に入ってきたのか、 私の指に乗せようとすると十秒くらい指を突っついてから乗るようになりました。 結局乗ってくれはするのでまだよいのですが、怒るのは控えめにしてくれると嬉しいです。 体重も少し増えましたが、もう少し増えてもらえるようにごはんも考えていけたらと思います。 ちなみに病院でさんちゃんは「オカメインコの中でも小柄なほう」と教えていただいたので、 体重は一応標準的な範囲内ではあるようです。 とはいえもう少し体重が増えてくれたら安心です。 元気に育ってほしいですね。 さん おわりに れもんとぐぐとさんちゃんの記録を書きました。 2025年ももうそろそろ終わりですね。 来年も元気にやっていけたらと思います。 2026年の抱負としては一ヶ月に一回はインコ日記を更新していきたいです。 あとは動画やGIF画像もたまに入れたいですね。 それでは、また。

作成日: 2025年12月21日 · Yusuke Kato