プログラミング

Google DriveをNextcloudで自前に置き換える

自宅のUbuntuサーバーにNextcloudを立てて、Google Driveの代わりにファイル置き場を自前で持つ手順です。公式イメージ nextcloud:32.0 の導入、保存先とポート(10081/10443)の決め方、アップロード上限の引き上げ、パソコン・スマホの同期アプリ、Tailscale経由での外部アクセス、Claude Codeへの指示書までまとめました。

目次

はじめに

Google Driveの容量がいっぱいになってきて、「毎月の容量課金、地味に効いてくるなあ」と感じたことはありませんか。

私自身、写真や書類をどんどんGoogle Driveに入れていたら無料枠を超えてしまい、容量を増やすために課金していました。
自宅サーバーを立てたのを機に「ファイル置き場くらいは自分のサーバーに引っ越せないか」と考えました。

結論として、Nextcloud(ネクストクラウド)という無料のソフトで、Google Driveはしっかり代替できました。
今では、書類やファイルを自宅サーバーに置いて、パソコンからもスマホからもアクセスし、自動で同期しています。
容量は自分のサーバーのディスクの大きさがそのまま上限になります。

この記事では、私が実際に動かしている設定値(イメージのバージョン・ポート番号・アップロード上限など)まで具体的に書きます。
記事の後半には、面倒な作業を任せるためのClaude Codeへの指示書も載せておきます。

前提として、Ubuntuを入れてCasaOS(Dockerのアプリを画面から管理できる仕組み)まで用意した自宅サーバーの土台があるものとして進めます。
外からのアクセスにはTailscaleを使うので、そちらも入っている前提です。

Nextcloudとは何か

Nextcloudは、自分のサーバーの上に「自分専用のGoogle Drive」を立てられる、無料のオープンソースソフトです。

できることは、まさにGoogle Driveと同じような感覚です。
ブラウザでファイルを見たりアップロードしたり、パソコンやスマホに専用アプリを入れて自動で同期したり、人にファイルを共有するリンクを発行したり、といったことができます。
Nextcloudは追加の機能(カレンダーや連絡先の同期、書類のオンライン編集など)も後から足せますが、まずは「ファイル置き場」として使うのが分かりやすいので、この記事はファイル同期に絞って紹介します。

大事なのは、ファイルの実体が「自分の家のサーバーのディスク」に保存されるという点です。
よその会社のサーバーに預けるのではなく、自分の手元に置いておける。
ここがクラウドサービスとの根本的な違いです。

Google Driveとの違い

ふだん使っているGoogle Driveと、自前のNextcloudの違いを整理しておきます。

  • 保存場所:Google Driveはデータがよその会社のサーバーにあります。Nextcloudは自分の家のサーバーの中にあります。
  • 容量:Google Driveはプランで決まった容量が上限です。Nextcloudは、自分のサーバーに付けたディスクの空き容量がそのまま上限になります。大きなディスクを足せば、その分だけ使えます。
  • 料金:Google Driveは容量に応じた月額がかかります。Nextcloudはソフト自体が無料で、かかるのは電気代くらいです。
  • 管理の手間:その代わり、Nextcloudは自分で設定とお守りをする必要があります。ここをサーバーに入れたClaude Codeに手伝ってもらう、というのがこの構成の考え方です。

Nextcloudの中身(少しだけ本格的)

同じくファイル同期に使うSyncthingは1つのアプリで動いていましたが、Nextcloudは中身が少し本格的です。
NextcloudはPHP(ピーエイチピー)という言語で書かれたWebアプリで、Webサーバー(Apache)の上で動きます。
私が使っている公式イメージ nextcloud:32.0 の中には、すでにPHP(8.3系)とApacheが一式入っていて、これを1つのコンテナ(アプリの箱)として起動するだけで画面が立ち上がります。

Nextcloudは、扱う情報を2種類に分けて持ちます。

Nextcloudが持つ2種類の情報と、その置き場所

ここで一点だけ補足しておきます。
Nextcloudは本格的に使うと、管理情報を入れるデータベースを別に立てて連携させる構成(MySQLやPostgreSQLを別のコンテナで動かす)にすることもできます。
ただ私の環境では、いまのところNextcloud本体のコンテナを1つだけ動かしていて、データベース専用のコンテナは別に立てていません。
それでもファイル同期の用途では問題なく動いています。
後で写真や書類が増えて動作が気になってきたら、そのときにデータベースを切り出す、という考え方で大丈夫かと思います。

このほか、より快適に使うための部品もあります。
たとえば、よく使う情報を一時的に覚えておいて表示を速くするキャッシュ(Redisなど)や、ファイルの整理やゴミ箱の掃除といった「裏で定期的にやる作業(バックグラウンドジョブ)」を決まった間隔で走らせる仕組みです。
最初は無くても動きますが、入れておくと動作がきびきびします。
まずは「本体コンテナ1つでも動く。必要になったらデータベースや高速化の部品を足す」と知っておけば十分です。

ステップ1:サーバーにNextcloudを入れる

CasaOSのアプリ管理画面から、Nextcloudを追加します。
これまでと同じくDockerの上で動かします。
私が使っている公式イメージは nextcloud:32.0 です(記事執筆時点で動いているのは 32.0.6)。
導入のときに決めるポイントは3つです。

  • ファイルの保存先(マウント):Nextcloudは、画面やアプリ本体の置き場である /var/www/html をコンテナの中に持っています。私はここを、用意したデータ用ディスクの /DATA/AppData/nextcloud/var/www/html に割り当てています。つまり、ホスト側の /DATA/AppData/nextcloud/var/www/html が、コンテナの中の /var/www/html として見えるようにつないでいます。こうしておくと、写真や書類をたくさん入れても容量に余裕のあるデータ用ディスクに溜まり、後のバックアップでもそのまま対象にできます。
  • ポート:Nextcloudのコンテナは内部では標準のWebのポート(80番=HTTP/443番=HTTPS)で待ち受けます。私はこれを、サーバー側では 10081番(→ 80番) と 10443番(→ 443番) に割り当てています。家の中からは http://(サーバーのIP):10081 でブラウザを開きます。ポート番号は何でもよいのですが、他のアプリと重ならない、覚えやすい番号を選んでいます。
  • メモリの目安:PHPアプリなので、ある程度メモリを使います。私の環境では、PHPが1リクエストで使えるメモリの上限(PHP_MEMORY_LIMIT)を 512MB に設定しています。古い機体でも動きますが、後述のとおり、同時に重い処理が重なると少しもたつくことがあります。

ネットワークはDockerの標準(bridgeネットワーク)のままで、特別な設定はしていません。
導入が終わると、ブラウザでサーバーのアドレスに :10081 を付けてアクセスすると、Nextcloudの画面が開きます。

ステップ2:ブラウザから最初の設定をする

Nextcloudの画面を初めて開くと、管理者アカウントを作る案内が出ます。
ここで決めるユーザー名とパスワードが、自分のNextcloudの入り口になります。
パスワードは長めの、推測されにくいものにしておくのがおすすめです。

このとき、使うデータベースの種類を選ぶ場面が出ることがあります。
別にデータベース用のコンテナを立てていなければ、ここはそのまま進めて構いません。
私の環境では、前の章で書いたとおりNextcloud本体のコンテナだけを動かしていて、ファイル同期の用途ではこれで問題なく動いています。
もし将来、写真や書類が大量になって動作が気になってきたら、そのときにデータベースを別コンテナに切り出す、という順番で十分かと思います。
最初から本格構成にしなくても、まずは動かして使い心地を確かめるのがおすすめです。

アカウントを作ると、Google Driveのような画面が表示されます。
試しに何かファイルを上げてみて、別の端末のブラウザからも同じファイルが見えることを確認すると、「ちゃんと自分のサーバーに置けている」という実感がわきます。

ステップ3:パソコン・スマホから自動同期する

ブラウザだけでも使えますが、本領を発揮するのは専用アプリを入れてからです。
Nextcloudには、Google Driveのデスクトップアプリやスマホアプリと同じような「同期クライアント」が用意されています。

  • パソコン:Nextcloudのデスクトップアプリを入れて、自分のNextcloudのアドレスとアカウントを登録します。指定したフォルダが自動でサーバーと同期されます。
  • スマホ:Nextcloudのモバイルアプリを入れれば、外出先からファイルを見たり、スマホで撮った写真を自動アップロードしたりできます。

私はパソコンの書類フォルダをまるごと同期していて、どの端末からでも最新のファイルにアクセスできる状態にしています。
操作感はGoogle Driveとほとんど変わりません。

ステップ4:ファイルを人に共有する

Nextcloudでも、Google Driveのように「共有リンク」を作れます。
共有したいファイルやフォルダを選んで共有メニューを開くと、リンクが発行されます。
このリンクを送れば、相手はアカウントを持っていなくてもファイルを受け取れます。

共有リンクには、パスワードを付けたり、閲覧できる期限を設定したりもできます。
「この資料だけ、今週いっぱい見られるようにしたい」といった使い方ができるので、仕事のちょっとした受け渡しにも便利です。

外からアクセスするには(Tailscale経由)

Nextcloudの画面も、私はインターネットに直接公開していません。
Tailscaleの回で決めたUFW(ファイアウォール)の方針どおり、Nextcloud用の10081番の入り口は、自宅LANと自分のTailscale端末からだけ許可しています。
具体的には、こんな2行を入れているイメージです。

sudo ufw allow from <自宅LANの範囲> to any port 10081 proto tcp     # 自宅LANから
sudo ufw allow from <Tailscaleの範囲> to any port 10081 proto tcp  # Tailscaleの端末から

<自宅LANの範囲> には自宅ネットワークの範囲(ご家庭により異なります。土台を作る回で調べた値)を、<Tailscaleの範囲> にはTailscaleが各端末に割り当てる専用アドレスの範囲(Tailscaleの管理画面やドキュメントで確認できます)を入れます。
こうしておくと、家の中からは http://(サーバーのIP):10081 で、外出先からはTailscaleをオンにして「サーバー名:10081」(たとえば myserver:10081)でアクセスできます。

スマホ・パソコンの同期アプリの接続先も、同じくTailscaleで付けたサーバー名と10081番を登録しておきます。
こうしておくと、家でも外でも設定を変えずに同じまま使えて、インターネットに入り口を開けないまま外から同期できます。

Claude Codeへの指示書

ここまでの構築を実際にやってもらうための、Claude Codeへの指示書です。
サーバーに入れたClaude Codeにこれを渡せば、サーバー側の準備を一緒に進めてくれます。
本文で出した値(イメージ nextcloud:32.0・ポート10081/10443・保存先は /DATA 配下・アップロード上限)を、そのまま方針として渡しています。
同期アプリの導入は最後に自分で行います。

あなたはこのUbuntuサーバーの構築を手伝うエンジニアです。
私は非エンジニアなので、専門用語は噛み砕いて、操作の前には何をするか一言説明してください。

目的:Google Driveの代わりに、Nextcloudで自分専用のファイル置き場を作りたい。
パソコンとスマホから同期して使えるようにしたい。

次の手順で進めてください。
1. CasaOS(またはDocker)で公式イメージ nextcloud:32.0 を動かす設定を作る。
   - まずはNextcloud本体のコンテナ1つで起動する(最初からDBを別コンテナにしなくてよい)。
   - 本体の /var/www/html を、/DATA 配下の容量に余裕のある場所にマウントする。
   - コンテナの80番をホストの10081番、443番をホストの10443番に割り当てる。
2. ブラウザでNextcloudの初期設定画面を開く方法(アドレスと10081番)を教えてほしい。
3. UFWで、10081番を自宅LANとTailscaleの範囲からだけ許可する。
   画面はインターネットに直接公開しない方針にしてほしい。
4. 大きいファイルをアップロードできるよう、PHPのアップロード上限(PHP_UPLOAD_LIMIT)と
   メモリ上限(PHP_MEMORY_LIMIT)、Apache側のボディサイズ上限も合わせて引き上げておいてほしい。
5. うまく起動しないときは、docker logs を見て原因を調べて直してほしい。
各ステップで、何をしたか・次に私が手元の端末で何をすればいいかを説明してください。

「本体コンテナ1つでまず動かす」「データの保存先は /DATA の下に」「外部公開はしない」という方針を伝えておくのがコツです。

容量と運用で気をつけること

実際に使う前に知っておくとよい点です。

  • 容量はディスクの大きさが上限:Nextcloudの容量は、データ用ディスクの空き次第です。写真や動画を入れると埋まっていくので、ときどき空き容量を確認しておくと安心です。
  • 大きいファイルのアップロード上限:Nextcloudは、土台のPHPやWebサーバーの設定で「一度にアップロードできるファイルの大きさ」と「処理に使えるメモリ」に上限があります。初期状態のままだと、大きな動画などをアップロードしようとして途中で失敗することがあります。私の環境では、次の3つを引き上げています。

  • PHP_UPLOAD_LIMIT=512MB:PHPが一度に受け付けるアップロードの上限。

  • PHP_MEMORY_LIMIT=512MB:PHPが1リクエストで使えるメモリの上限。アップロードや画像処理が重いと、ここが小さいと途中で力尽きます。
  • Apacheのボディサイズ上限=1GB:Webサーバー側で、1回のリクエストで受け取れるデータ量の上限。PHP側だけ上げても、ここが低いと弾かれるので合わせて上げます。

「写真主体なら512MBで十分、大きな動画も扱うならもっと上げる」という具合に、自分の用途に合わせて決めれば大丈夫です。

  • バックアップはセットで考える:自分のサーバーにデータを置くということは、そのディスクが壊れたら困るということです。私は外付けHDDへ自動バックアップする仕組みを別に用意しています。Nextcloudの場合、バックアップ中にファイルが書き換わると中身がちぐはぐになるおそれがあるので、そちらでは取り出しの前に一時的に「メンテナンスモード」(書き込みを止める状態)にしてからデータを取り出すようにしています。ファイルの実体(/DATA 配下)に加えて管理情報も守る必要があります。

よくあるトラブルと対処

つまずきやすい点をQ&Aでまとめておきます。

Q. 画面がなかなか開かない、動作が重い
古い機体でメモリが少なめだと、重い処理が重なったときにもたつくことがあります。
私の環境のように本体コンテナ1つで動かしている場合、写真が大量になってくると一覧の表示が重くなることがあります。
そのときは、前述のデータベースを別コンテナに切り出す構成にすると改善が見込めます。
まずは docker stats でNextcloudのコンテナがメモリを使い切っていないかを見てみるのがよいかと思います。

Q. 大きいファイルをアップロードしようとすると失敗する(途中で止まる・エラーになる)
上で触れたアップロードの上限に引っかかっている可能性が高いです。
チェックする場所は2つで、PHP側の PHP_UPLOAD_LIMITPHP_MEMORY_LIMIT と、Apache側のボディサイズ上限です。
PHP側だけ上げてもApache側が低いと弾かれるので、両方を合わせて引き上げます。
私は前者を512MB、後者を1GBにしています。

Q. 画面に「メンテナンスモードです」と出て使えない
バックアップなどでメンテナンスモードに入れたまま、解除し忘れているケースがほとんどです。
書き込みを止める設定なので、解除すれば元に戻ります。
私のバックアップの仕組みでは、データを取り出したあとに自動で解除するようにしています。

Q. 同期アプリに入れたのに、ファイルが反映されない
同期するフォルダの指定が正しいか、アカウントでログインできているかを確認してください。
接続先のアドレスが「サーバーのIP(またはTailscaleのサーバー名)+10081番」になっているかも確認しましょう。
いったんログインし直すと直ることもあります。

Q. スマホの写真が自動アップロードされない
モバイルアプリの「自動アップロード」がオンか、スマホのバッテリー最適化でアプリが眠らされていないかを確認しましょう。
自動処理を使うアプリは、最適化の対象から外しておくと安定します。

まとめ

いかがでしたか。
今回は、Google Driveを、自前のNextcloudで置き換える方法を紹介しました。

手順を振り返ると、

  1. 公式イメージ nextcloud:32.0 を、まずは本体コンテナ1つで動かし、保存先(/var/www/html)を /DATA の下に決める
  2. ポートは10081番(→80)/10443番(→443)に割り当て、ブラウザで管理者アカウントを作って初期設定する
  3. アップロード上限(PHP側512MB・Apache側1GB)を上げ、パソコンとスマホに同期アプリを入れて自動同期する
  4. 外からはTailscale経由でアクセスし、必要なファイルは共有リンクで人に渡す。バックアップはメンテナンスモードと合わせて扱う

という流れです。

容量を気にせず使えて、データも自分の手元に置いておけるのは、思った以上に快適でした。
最初に少し設定の手間はかかりますが、一度動き出せばGoogle Driveとほとんど変わらない感覚で使えています。

なお、写真のほうをGoogle Photosから移したい場合は、同じサーバーの上でImmichを動かす方法を別の記事にまとめています。

この記事が誰かの役に立てばうれしいです。