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
自宅 PaaS でメンテナンスフリーな個人開発
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
HORIUCHI Akihiko
December 26, 2025
Technology
34
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自宅 PaaS でメンテナンスフリーな個人開発
#tech-midnight で発表しました。
HORIUCHI Akihiko
December 26, 2025
More Decks by HORIUCHI Akihiko
See All by HORIUCHI Akihiko
What is LB? / LBaaS? / Managed LB?
hiconyan
0
100
Managed Load Balancer のつくりかた
hiconyan
0
1k
ベアメタルのつくりかた
hiconyan
1
1.4k
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
そのドキュメント、自動化しませんか?
yuksew
1
400
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
320
[Droidcon Orlando '26] The Android Lens: Applying Mobile Forensics to AI Performance
amanda_hinchman
1
100
キャリアLT会#3
beli68
2
230
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
160
人とエージェントが高め合う協業設計
kintotechdev
0
700
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
270
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
3
510
シンガポールで登壇してきます
yama3133
0
340
JAWS_ICEBERG_BASECAMP
iqbocchi
2
110
「顧客の声を聞かなければ何も始まらない」 ── 顧客の声から生まれた『AI返信補助機能』の開発プロセス / AICon2026_shikata_imai
rakus_dev
0
260
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
170
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
270
A better future with KSS
kneath
240
18k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
460
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
970
From π to Pie charts
rasagy
0
240
Transcript
自宅 PaaS で メンテナンスフリーな個人開発 Akihiko Horiuchi (@hiconyan) 2025/12/26 @ #tech-midnight
https://hiconyan.page/ 2
• いくつか Ruby や Node.js で作った個人開発の Web アプリがあり、これまでは Heroku の上で動かしてきた
◦ 家計簿、温湿度計、フォトアルバムなど ◦ Basic Dyno ($7 / 月) + Redis Mini ($3 / 月) の組み合わせのアプリが 2 つ ◦ その他もろもろで約 $30 / 月 • しかし、円安の影響で料金がかさんできたた ◦ ミニ PC を買って Dokku を入れ、そっちに移行することにした ◦ ただし、なるべく管理は楽にして、個人開発に注力したい ▪ メンテナンスフリー (OS やランタイム / ライブラリのバージョンアップなど) ▪ ステートレス / ポータビリティ (環境が壊れてもすぐに作り直せる) Background / Motivation 3
• Platform as a Service (PaaS) ◦ PaaS は、ソフトウェアを構築および稼動させるための土台となるプラットフォームを、インターネット 経由のサービスとして提供する
◦ 具体的には、インフラ / ミドルウェア / ユーザインタフェースなどのシステムを開発する手段となる ツールや、開発したシステムを運用するための環境など • Buildpack ◦ リポジトリに含まれる情報からランタイムやフレームワークを特定し、そのベスプラに則ってコンテナ イメージをビルドしてくれるもの ◦ Heroku が最初に開発し、その後 Pivotal も対応したが、現在は Cloud Native Buildpacks として標準 化されている • ちなみに… ◦ SDPF でも (ECL2.0 時代に) Cloud Foundry ベースの PaaS メニューがあったけど、サービス終了済み ◦ Pivotal が開発していたが VMWare に買収され、VMWare は Broadcom に買収された What is PaaS? Buildpack? 4
• Heroku ◦ 2007 年にアメリカで創業し、2010 年に Salesforce に買収された ◦
ソフトウェアは「Dyno」と呼ばれるコンテナの上で動き、Ruby / Python / Node.js / Go などがサポー トされている ◦ 公式のアドオンとしてマネージドな Postgres / Redis などのミドルウェアがあり、ダッシュボードや CLI から 1 クリックでインストールできる ◦ 料金はコンテナやミドルウェアの性能 (プラン) と、それを使った時間で決まる ▪ 無料枠があったけど 2022 年に廃止された • Dokku ◦ 2013 年頃に開発がはじまったオープンソースの PaaS ▪ Shell Script で実装されている (最近、Go でリライトしているらしい) ◦ ソフトウェアは Docker 上で動き、コンテナイメージは Heroku と同じく Buildpack で作られる ▪ 最近、マルチノードをサポートするために K3s (軽量な K8s) 上でも動かせるようになったけど、 試したことはない ◦ 公式のプラグインとして MySQL / Postgres / Redis / RabbitMQ などのミドルウェアがあり、CLI か ら 2 コマンド程度でインストールできる What is Heroku? Dokku? 5
• ミニ PC として Minisforum の UN100D を約 3 万円で購入して、Ubuntu
24.04 をインストール ◦ CPU: Intel N100 / メモリ: 16GB / SSD: 256GB • 外から SSH / HTTP でアクセスできるようにするために Cloudflare Tunnel を使うことにした (無料) ◦ ドメインの NS レコードを Cloudflare に向けておかないといけないけど、SSL も終端してくれる Infrastructure 6
• パッケージのセキュリティアップデートを自動適用して、自動再起動もして欲しい ◦ → unattended-upgrades を使って実現する ▪ 【Ubuntu】セキュリティアップデートの自動適用 | 開発者ブログ
| 株式会社Skrum ▪ 必要であれば 17:00 JST に再起動 (適当) • ランタイム / ライブラリを自動バージョンアップして、CI が通ったらデプロイまで欲しい ◦ → GitHub Actions で頑張る (Appendix を参照) ▪ 毎週日曜日の 09:00 JST に自動バージョンアップ • ランタイムのパッチバージョンアップ • bundle update / npm update • Pull Request を作って auto-merge を有効化 ▪ CI は 壊れたら家族に怒られる 壊れたら困るアプリだけ真面目に書く • 自分しか使わない 壊れても困らないアプリは壊れたら直す • Unit Test は RSpec + Integration Test は Newman (Postman) ▪ Pull Request がマージされたら (main に Push されたら) Dependency Graph を更新 • Trivy で SBOM を作って GitHub にアップロード • 脆弱性が出たら GitHub の Notifications で教えて貰える Maintenance Free 7
• Dokku は ミドルウェア系のプラグインも豊富 だけど、Redis 以外は使わない ◦ データベースを使うと、バックアップのことを考えないといけなくなる ▪ →
Google Spreadsheet をデータベース代わりにする • 家族も分析できるし、アプリの開発を止めてもデータは残る • 書き込みには 2 〜 3 秒かかるけど、Redis にキャッシュしているので読み込みは 1 秒くらい ▪ → 画像などのアセットは AWS S3 にアップロードする • 画質や画像サイズを工夫すれば、$1 未満に治まる • クリーンインストールできる / 羃等に環境構築できるようにしたい ◦ → Shell Script で頑張る (Appendix を参照) ▪ 個人開発に Ansible は too much なので ▪ Shell Script は 200 行ちょっとで済んだ • パッケージの最新化と OS の初期設定 (SSH や TZ など) • cloudflared と docker & dokku 、mackerel-agent のインストールと設定 Stateless / Portability 8
• Pull Request が作成 / 更新されたら Review App を Dokku
にデプロイ ◦ Heroku だと Review Apps の設定をしておくだけで、自動でできるんだけど… • Pull Request がマージされたら (main に Push されたら) アプリを Dokku にデプロイ ◦ Heroku だと GitHub Integration の設定をしておくだけで、自動でできるんだけど… • Pull Request がマージされたら Review App を削除 ◦ 以下同文 → GitHub Actions で頑張る (Appendix を参照) Continuous Delivery 9
• その他にも色々と工夫していて… ◦ Ruby on Rails は使わずに Sinatra を使う (手に馴染むので)
◦ ログイン機能は作らない (username と secret token で認証するだけ) ◦ PWA (Progressive Web Apps) でネイティブアプリっぽく動かす ▪ CSS / JavaScript / Web フォントはプリコンパイルして端末にキャッシュしておく • 今後やってみたいこと… ◦ K3s スケジューラを使ってマルチノード化してみたい ▪ ただし、イメージレジストリを用意する必要がある ◦ ミドルウェアの自動バージョンアップもできるようにしたい ▪ dokku redis:upgrade するだけなので In addition ... / To be continued ... 10
https://gist.github.com/hico-horiuchi/64ce86f701b2d8c46b5cb89bed0372de • GitHub Actions ◦ update_dependencies.yaml ◦ sbom.yaml ◦ ci.yaml
◦ cd.yaml ◦ garbage_collect.yaml • Shell Script ◦ setup_un100d.sh Appendix 11