【Cline】MCPサーバをPodman環境で動かす
TL;DR
こいつをローカルやDocker環境ではなく、Podman環境で動かしたい
注意
ローカルに落として動かすだけで、本番環境運用とかではないので、ファイルパーミッションなどはガサツに設定するのも認めています
やり方 (Git Tools)
どれを動かしても良いのだけれど、チュートリアル的に良いと思ったのでこの中のGit Toolsを動かす
イメージのビルド
$ git clone git@github.com:modelcontextprotocol/servers.git ./mcp-servers
$ cd mcp-servers/git/src
$ vi Dockerfile
Dockerfileを以下のように修正する。(--mountがうまく動かなくてイメージのビルドに失敗するため)
(略) COPY uv.lock uv.lock # 追加 COPY pyproject.toml pyproject.toml # 追加 # Install the project's dependencies using the lockfile and settings RUN --mount=type=cache,target=/root/.cache/uv \ # --mount=type=bind,source=uv.lock,target=uv.lock \ # コメントアウト # --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ # コメントアウト uv sync --frozen --no-install-project --no-dev --no-editable (略) WORKDIR /app COPY --from=uv /root/.local /root/.local COPY --from=uv /app/.venv /app/.venv # Podmanコンテナはrootユーザがローカルユーザにマッピングされるためchownを外す (略)
あとはビルドしておく
$ podman build -t mcp/git .
Clineで動かす
vscode-serverの設定を変更する
.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
{ "mcpServers": { "github.com/modelcontextprotocol/servers/tree/main/src/git": { "command": "podman", "args": ["run", "--rm", "-i", "-v", "/home/mattyan1053:/home/mattyan1053", "--privileged", "mcp/git"], "disabled": false, "autoApprove": [] } } }
ボリュームマウントのパスは許可したいところをホスト側と揃えるようににマッピングする
【FF14】2024年の固定活動を振り返る
パッチ7.2がいよいよ明日来ますね。ログインできないこの間に、一年の振り返りをしてみようかなと。
- TL;DR
- 参加経緯
- 異聞アロアロ島零式 (参加ジョブ: 機工士・召喚士)
- 絶アルテマウェポン破壊作戦 (参加ジョブ: 学者)
- 絶バハムート討滅戦 (参加ジョブ: 学者)
- 至天の座アルカディア零式ライトヘビー級 (参加ジョブ: 戦士)
- 絶アレキサンダー討滅戦 (参加ジョブ: モンク)
- 絶竜詩戦争 (参加ジョブ: 吟遊詩人)
- 絶もう一つの未来 (参加ジョブ: モンク)
- 最後に
- おまけ(GW絶アレキサンダー討滅戦: 機工士)
TL;DR
2024年2月~2025年2月の1年間かけて、結構熱心にFF14をプレイしていて、絶や零式を固定パーティに入ってプレイしていた。 挑んだコンテンツは以下だった(カッコ書きは未クリア)
- 異聞アロアロ島零式: 2024年1月
- 絶アルテマウェポン破壊作戦: 2024年2月末~3月頭
- 絶バハムート討滅戦: 2024年4月~5月頭
- (絶アレキサンダー討滅戦): 2024年5月(ゴールデンウィーク)
- 至天の座アルカディア零式ライトヘビー級: 2024年7月末~8月頭(周回は9月まで)
- 絶アレキサンダー討滅戦: 2024年9月中旬~10月上旬
- 絶竜詩戦争: 2024年10月中旬~11月中旬
- 絶もう一つの未来: 2024年12月~2025年2月上旬(周回は3月頭まで)
参加経緯
2022年秋にFF14を始めた。
FF14開始当時、ストーリーが面白すぎて爆速プレイしたものの、その後は高難易度には挑まないのんびりプレイを3ヶ月続けていた。プレイ開始から半年経って初めて極ルビカンテに挑み、「なるほどこういうゲームか」と思っていたのはあっという間、もう2年前らしい......。
それから少しして、野良で極や零式程度まではやるようになっていた。現行零式を万魔殿パンデモニウム天獄編で初めて経験し、野良で4層クリアまで2ヶ月かかることで高難易度の厳しさを知った。
(今思えば、律儀にフェーズを守り、そのフェーズが完璧にできるようになって次進むような丁寧さをやっていたのが、このゲームの傾向にあっていなかったように思う)
天獄編を8周終えてからはエウレカなどののんびりコンテンツを楽しんでいた。2023年秋には新しくリア友がFF14をプレイし始め、友人の友人という形でFF14繋がりの輪を広げていた。当時、数ヶ月に一回の零式はちょうど良いし、絶は今後も行くことはないだろうなあと思っていた。もとより、オンラインゲームの高難易度はついていくのになかなかエネルギーを使うので、DQ10のバラシュナIII手前あたりで引退したつもりだった。
さて、それから少しして、そのリア友経由でFF14をプレイしている友人が増えた。高校時代の後輩とかもいて、意外な繋がりもあるものだなあ、と感じていた頃、そのうちの一人が言い出した。
「絶テマいきましょう。簡単ですよ」
これが全ての始まりだったのだ......。
異聞アロアロ島零式 (参加ジョブ: 機工士・召喚士)
絶テマいかないんかーい、というのはさておき、2023年秋に始めたリア友たちが天獄編零式をクリアするまで絶テマ始めるのを待つことになったので、その待ち期間に誘われてアロアロ島零式に行くことになった。
そもそもアナザーダンジョンの仕組みさえ理解していなかったものの、交換できる武器の見た目が良いことは知っていたのでホイホイついていった。
最初の構成は「戦学機召」。採用した攻略法は「湧水ピレンTH塔固定」だったような記憶。野良でも流行っていたやつだと思う。
コンテンツ全体を通して、ギミックが複雑目な代わりに考える猶予時間が結構多いというタイプだった。反射神経だったり短い時間での思考が要求されるのは苦手なので、どちらかというと得意な部類のギミックだったと思う。
みんな優秀で、4日程度でクリアした。

初回クリアまではスムーズだったものの、周回は少し難航した。やはりワイプしたら最初からなのと、蘇生ができないのはとても重い。召喚の人がサブキャラで踊り子やったりしていたので、代わりに交代して召喚士をやったりした(このために4日でマンダヴィルウェポンを作成した)。クリア回はタンクが戦士だったが、その後ナイトに着替えていて、そちらのほうがやりやすそうだった。
周回終わったあともちらほら野良誘われたりして、最終的にはナイト・賢者・機工士・召喚士ではクリアしたと思う。メレーはリーパーやりかけて下手くそでやめた。

ラースグラインダーRE+、最初なにこれダサいって思ったけど、だんだんじわじわ好きになってきて、今ではイチオシの武器になった。最終的に12種くらい交換した気がする。
絶アルテマウェポン破壊作戦 (参加ジョブ: 学者)
2月末、リア友とその友人、僕の大学の先輩を呼んできて頭数を揃えていよいよ挑むことになった。
なお活動始まるまで待っている間、ノリで野良にぶちこまれてD2置物忍者でクリアしてきていた。巷で言われているように絶テマは零式より簡単、みたいなのはあまり軽率に言いたくないと考えているけれど、正直D2は擁護できそうにない。LBを撃たさせていただいています。
構成はガナ占学モ召踊赤。ジェイル自殺式。なぜか3連ジェイル経験済みのヒーラーが2人いた。クリアまでかかった時間は13時間程度。5人初絶だったけれど、みんな優秀だった。

よく言われるほど簡単か?というのは正直思っているものの、天獄編よりは簡単だと思う。初絶におすすめされるのも納得。武器の見た目も良い。

まだ全然交換していないので、もう少しやってもいいかもとは思える。
絶バハムート討滅戦 (参加ジョブ: 学者)
そのまま他の絶もやりたいなーという話になり、絶バハムートに挑むことに。忙しい人やお休みしたい人がいて一部メンツ入れ替え。うち2人はなぜか表で絶竜詩戦争やっている裏でこの絶バハ固定が行われていた。意味不明。
構成はガナ占学賢忍召(or機or踊)赤。流行りのH3構成だった。攻略法はみんとっと式を参考に一部改変。

絶エデンを終えた今振り返ってみて思うのだが、この身内固定、本当によく喋る。特にネール語と日本語を混在させるのだけは本当にトロールだったと今でも思っている。
難易度はさすがに絶という感じで、このあたりからちゃんと零式よりも難しいかな?という印象。とはいえ8本塔をタンクLBで耐えたりと結構無茶苦茶していた。なんだかんだクリアまでかかったと思う。30時間程度だった気がする。
悪名高いエクサフレアも経験した。ぼくはエクサフレア苦手族だなと認識した。ちなみに苦手なのはキャラコンじゃなくて緊張。キャラコンはWASD移動なのものあってどちらかというと毎回同じ位置に正確に動ける方だと思っている。ただ緊張が本当に無理。
たぶん最終フェーズじゃないエクサフレアは得意。でもエクサフレア最終フェーズにしかこないんだよね......。

歴代エクサフレアでもこの初代が一番苦手。絶バハは次誘われてもなかなか頷かないかも。
至天の座アルカディア零式ライトヘビー級 (参加ジョブ: 戦士)
パッチ7.0が来て絶は一旦休憩。でも高難易度は結局やるんだよね......。 7月はちょっと高難易度から離れていたので気は楽だった。みんなが新パッチで忙しい隙にマイハウス購入できたりもしてFF14ライフを楽しんでいた。

構成は戦ガ占学忍ピ踊召。絶バハとは3人メンツ入れ替えあり。
これまでとはうって変わって戦士で参戦。ジョブのこだわりはあまりないので、余ったジョブをやっていたらタンクになった。 (なお初週に暗黒武器を拾ったガンブレイカーはガンブレードを投げ捨て大剣を握っていた)
演出が凝っているのが良い零式だった。難易度も簡単簡単言われているけれど、零式はこれぐらいで良いと思う。個人的には一番楽しく遊べるライン。疲れている日でも遊べる。
絶アレキサンダー討滅戦 (参加ジョブ: モンク)
絶エデンまでじっとして待てないのかこの人たちは......。これまでの固定のメンツから選んだ7人+大学時代の同期1人呼んできて挑戦。この呼んだ人はクリ済みなのに来てくれた。ありがたい。

構成はナ暗戦学モ赤踊ピ。ヤークト無視を採用。ピクトマンサーの圧倒的パワーを見ることになった。
ヤークト無視、実践回数を増やすことができるのが素晴らしい解法。でもギミックを馬鹿にしている。
詳しい話は以下に載っている
クリアまでかかった時間は20時間程度。早すぎる。この裏でPRIMALSのライブに行っていて、モチベがぶち上がっていた。RISEやっぱ良い曲だしテンションあがるよ!
できるようになると急にミスしなくなるタイプのギミックが多かった印象。周回がかなりスムーズで、無事17周を1週間くらいでできた。

写ってないけどガンブレードがかなり好き。ほかも全体的に安定して見た目の良い武器が多い印象。もう交換できる武器はないけれど、楽しい個人的に好きなギミックが多いので、付き合い次第ではまた行くのもあり。

絶竜詩戦争 (参加ジョブ: 吟遊詩人)
絶エデンまでじっとして待てない第二弾。残り一ヶ月しかないのに、絶エデンくるまでにクリアしようとかいうチャレンジ。絶アレキクリアして気持ちよくなっているところを誘われて、ついて行ってしまった。とはいえ、もともとこのストーリー重視の絶にはいつか挑んでみたいと思っていた。正直一番興味あった絶はこれ。

構成は暗ナ占学黒竜詩ピ。みんなの希望ジョブを通した感じある。詩人は希望したというよりレンジでやるならこれかなーぐらいだけど。今度は詩人で参戦。移動スキルほしいよ~。 詳しくはココ。
かかった時間は47時間。
聖杖のGGパターンは勝率5/7だった。一度もGGパターンを引いていない人がいる一方で、僕はGGパターンを結局7回も引いた。やってみて思うのは、音ゲープレイヤーはたぶんGGパターン得意。
堕天のドラゴンダイブは一度は経験したいギミック。本当に好き。ただこれやっている最中にネール語喋るのはトロール。暁月でサイコロに訓練されたヒカセンには案外できてしまうような感じがある。 さすがに暁月絶なだけあって難しいけれど、やっていて気持ち良いギミックが多く全体的に楽しい。

賢者のやつの見た目がかなり好き。クリアも割と絶エデン来るギリギリで、周回も3周しかできていないのでまだ行きたいと思っている。
相変わらず雑談の量は多くて、一番笑ってしまったのはエクサフレア始まった瞬間に「逆に~」とか言って喋り始めた人がいた時。正気か? でもこの人聖杖で逆回りしますからね。
絶もう一つの未来 (参加ジョブ: モンク)
これまではずっと身内固定だったけれど、絶エデンではアレキ・竜詩を一緒にやった大学時代の同期に誘われて別の固定で挑戦。メンバーがごっそり入れ替わった。何が印象深いって雑談の量が急激に減っているところですよね(それが悪いというのではなく、今までがおそらく異常)

構成は暗ナ占学モ忍踊ピ。厨パみたいになってた。今回はモンクで参戦。クリアまでは86時間程度。
初めての現行絶だったので身構えていたけれど、体感としてはそこまでこれまでの高難易度と差は感じてないくらい。ただ個人的な感覚として、一定以上の難易度になるとあまり難易度差を感じないタイプらしいので、あまり参考にならないかも(天獄零式と絶竜詩であまり難易度差を感じていない)。
アポカリプスが一番苦手だったかなあ。単純に見づらいエフェクトが苦手というのはある。逆に時間結晶は相当得意。あと赤ブリ爆走に関しては抜重でズルしていたのでミスしようがなかった。竜取り逃がしも最初の1回タイミング掴めていなくて逃した以外一度もミスしていないと思う。
ギミックとして楽しかったのはP2かなあ。エクサは踏んだけど少ない方ではあったくらい。ただ時間切れの回で踏んだりして踏むタイミングが他のみんなミスってない時とかで最悪だった。
固定活動中にTerarriaとCore keeperを一部の固定メンツとめっちゃしていた。FF14以外のところでも遊べるのは良いなと思う。やっぱ固定活動中しか喋らないと雰囲気も微妙になっちゃうしね。地味に固定後のフロントラインが好きだった。

5周できて、モンク、赤魔道士、暗黒騎士、賢者、ガンブレイカーを交換した。もう少し回りたいなーと思っている。
最後に
気がついたら5絶クリ済みになっていてびっくり。一年前は絶なんて考えていなかったのに......。 最初の絶テマのときに声かけてついてきてくれた大学の先輩は気がついたら一緒に5絶になっていて、ついてきてくれてありがとうございますの気持ちです。
個人的には一番苦しかったのは絶バハだと思っている。ワイプ時の原因がわかりにくいのとエクサが効いている。
7.2は元の固定メンバーにほぼ戻って、零式も頑張るので引き続きよろしくお願いします。絶エデンと絶竜詩の周回もしたいなあ。絶オメガは今のところモチベーションがないです。武器の見た目が好みではないのと、過去作やっておらずストーリーに思い入れがない......。
僕自身、結構武器の見た目がモチベに直結している感じがする。次の新しい絶はモチベーション次第かなあ。 空いた期間にモンハンとかウマ娘してみたり、のんびりコード書いてみたりするのも一興だと感じている。そういう意味では3月は良いリフレッシュになったかも。
おまけ(GW絶アレキサンダー討滅戦: 機工士)
GW中に絶アレキをクリアしようみたいな野良の募集に2日間だけ乗っかって参加していた。2日目夜までやったあたりでP2までまともにいかず、爆散してしまった。 爆散のときには悩まされたけど、結果的に判断早くて助かったという捉え方をすることにしている。
【Rails】【Podman】Rails 8 の開発環境を Podman で構築する
TL;DR
Railsの開発環境を構築します。今回はRHEL 8 から正式に採用されているコンテナ管理ツールである Podman を利用して開発環境の構築を行います。
Podman とは?
「Pod manager」の略称です。Kubernetes Podと同様なコンテナグループを一元管理することができます。
Dockerを利用するのに比べて、以下のような優位性があります。
- Podman は Red Hat の
container-toolsモジュールに標準で含まれており、公式サポートを受けることができる - RHEL 9 からの cgroup v2 を標準使用している
- SELinux に最適化されている
- デーモンレスで動作するため、単一のプロセスに左右されない
- デフォルトの挙動が rootless になっている
主にサポート面とセキュリティ面で将来性が高いのではないかと個人的には考えています。
動作環境
環境構築手順
Rails new まで
Podman から ruby:3.4.2-slim のイメージを使って rails new します。
初回だけ、かつリポジトリを準備している人のみが実施する操作なので、個別にイメージは作らずにコマンドを実行します。
# あらかじめプロジェクトルートに居るものとする $ git init && git branch -m main $ podman run --rm -it -v ./:/app:Z --workdir=/app ruby:3.4.2-slim bash # ここからコンテナ内 $ apt update && apt install -y build-essential git zlib1g-dev libsqlite3-dev pkg-config libyaml-dev libmariadb-dev vim nodejs npm $ npm install --global yarn $ gem install rails $ rails new . --database=mysql --js=esbuild --css=tailwind $ exit
Databaseの変更
今回はDBにMySQL 8.4を指定します。SSLモードがrequiredになっているので注意です。
default: &default
adapter: mysql2
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
ssl_mode: :required
(略)
ここまでで ruby コンテナ内で実行すべき手順は終わりです。
イメージのbuild
docker compose の build.context のようなことができないので、あらかじめimageをbuildしておく必要があります。
まずは、bin/build-image を作成します。
$ vi bin/build-image $ chmod 755 bin/build-image
シェルの中身↓
#!/bin/bash podman build -t rails8-podman-app .
また、Dockerfileを一部修正します。
Podmanはrootlessで動き、実行ユーザのユーザIDと、コンテナ内のrootユーザがマッピングされます。ここが通常のDockerと大きく異なるところで、これによりコンテナがrootユーザで動いていてもホストOSに対して操作をしにくくなっています。
(なお、ホストOS上でrootユーザが所有しているファイルをマウントすると、コンテナ内からは nobody nogroup が所有しているファイルとして見え、いじることができません)
このため、Dockerfileで USER 1000:1000 としている部分は不要なのでコメントアウトします。
# # Run and own only the runtime files as a non-root user for security # RUN groupadd --system --gid 1000 rails && \ # useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \ # chown -R rails:rails db log storage tmp # USER 1000:1000
これで準備完了です。イメージをbuildしてみましょう。
$ bin/build-image
Pod の設定
最後に、これまでの compose.yml に相当するmanifestファイルを記述します。ファイル名は manifest.dev.yml にしました。
apiVersion: v1
kind: Pod
metadata:
name: rails8-podman
spec:
containers:
- name: app
image: rails8-podman-app
command: ["irb"]
ports:
- containerPort: 3000
hostPort: 3000
volumeMounts:
- name: app-volume
mountPath: /rails:Z
workingDir: /rails
env:
- name: RAILS_ENV
value: development
- name: TZ
value: Asia/Tokyo
tty: true
- name: db
image: mysql:8.4
ports:
- containerPort: 3306
hostPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: password
- name: TZ
value: Asia/Tokyo
volumeMounts:
- name: db-data
mountPath: /var/lib/mysql
volumes:
- name: app-volume
hostPath:
path: ./
- name: db-data
persistentVolumeClaim:
claimName: db-pv-claim
ポイントは、mountPath に :Z をつけているところですね。これがないとSELinuxに蹴られてコンテナ内からホストのファイルにアクセスできません。本番環境では望ましいですが、開発環境でこれは極めて不便です。
これにて準備完了です!
Pod の起動
さて、準備は整ったので Pod を起動してみましょう!
できたらDBマイグレーションを行って、起動してみます。
$ podman play kube manifest.dev.yml $ podman exec -it rails8-podman-app bin/rails db:create db:migrate $ podman exec -it rails8-podman-app bin/rails s -b 0.0.0.0
お疲れ様でした!
おまけ
今回、rails new で生成されたDockerfileを軸に開発環境の構築をしましたが、ベースイメージがslimなので、コンテナ内でほとんどのコマンドが叩けません。
また、gemのインストールもgemのビルドでコケたりするでしょう。
もし bundle add や vim が使いたい場合、都度 apt update && apt install -y build-essential vim や他の必要なパッケージをいれることになります。
そこで、developmentターゲットをDockerfileに追加して、開発時はそのイメージで実行するようにする方法もあります。
FROM build as development RUN apt-get update -qq && apt install --no-install-recommends -y vim mariadb-client # ここに入れたいパッケージを入れていく ENTRYPOINT ["/rails/bin/docker-entrypoint"] CMD ["./bin/thrust", "./bin/rails", "server"]
bin/build-image-devも用意しておきます。
podman build --target=development -t rails8-podman-app .
イメージのタグもdevとわかるようにしておいたほうがより良いかもしれません。
ただし、開発用イメージのサイズが大きくなることは注意しましょう。
付録
私が上記手順に加えていくつか Rails のテンプレートに良さそうなものを導入したりしたものを以下にあげています。