Navigate back to the homepage

Android でプライベートストレージを運用する

Kenya Hondoh
May 3rd, 2020 · 1 min read

リーンな考え方における価値とは顧客にとってのメリットを提供するものを指し, それ以外はすべて無駄だ - Eric Ries

今日も無駄をやっていきたいと思います。

経緯はいい,結論を教えてくれ

  • iCloud の容量使い切ったから,ストレージサービスを自宅で動かしてみた
  • NextCloud (乱暴に言えば OSS の Dropbox)を,Android タブレットをサーバーとして動かした
  • ↓ こんな感じで,iPhone や PC から写真のアップロードとかダウンロードとかできる

demo 左:クライアント操作画面,右:サーバー・Android タブレット

  • パフォーマンスは微妙だった
  • Amazon Photos はいいぞ

構成

  • Android - HUAWEI MediaPad M5 lite 8 (CPU: Kirin 710,RAM: 3GB,ストレージ: 128GB)
  • Termux - Android 端末上で動く,Linux 仮想環境
  • NextCloud - オンラインストレージサービスを提供するための OSS

手順

1. Termux をインストールする

👉 Google Play - Termux

Termux は Android 端末上で Linux 仮想環境を用意してくれるアプリです。 こんな小さなタブレットが開発環境になるのはプチ感動です。

(最近は開発環境 on クラウドの流れがきていますが c.f. GitHub Codespaces

2. Termux から Android へのリソースアクセスを許可する

Termux を起動し,コマンド: termux-setup-storage を実行。 すると,home ディレクトリ直下に storage というディレクトリが生成されます。

1$ termux-setup-storage
2$ cd ~
3$ ls
4storage

SD カードを挿している場合, storage 直下に external-* というディレクトリが見えます。

3. NextCloud を実行するのに必要なパッケージをインストールする

1pkg install php php-fpm sqlite coreutils openssl-tool

4. NextCloud のソースコードを clone する

適当なディレクトリで,NextCloud のソースコードを引っ張ってきます:

1git clone https://github.com/nextcloud/server.git nextcloud

次に,サードパーティライブラリを引っ張ってきます:

1$ cd nextcloud
2$ git submodule update --init

5. サービス実行

サービスを起動します。その前に,おうちの LAN から サービスにアクセスするために, Android に割り当てられているローカルIPをメモっておきましょう。

1$ ifconfig | grep 192.168.*
2 inet 192.168.2.111 netmask 255.255.255.0 broadcast 192.168.2.255
3 # ↑これ

それではいよいよ起動です〜。

1php -S 0.0.0.0:8080 -t ./

↑ オプション -t で,ストレージとして使うパスを指定できるぽいです。SDカードを使う場合はさっきのパスを指定します。

するとなんかログが流れてきましたね,拙者興奮してきました。

6. 簡易テスト

目的は iPhone の写真をごっそり移管することだったので, iPhone に NextCloud のクライアントアプリを落とします。App Store から頑張って探します。

サーバーの IP を聞かれたら,さっきメモった IP とポート番号を入れます。

例:http://192.168.2.111:8080

初回はアクセス時は管理ユーザ名とパスワードとか入力してやる必要があります。

そしたら,いけましたね???普通に使えましたね?????すご〜い。

使ってみた感触

  • アップロード速度は 2~3 MB/sec くらい

悪く無い。ただ,iPhone の仕様上バックグラウンドでの アップロードができんらしいので,アプリを開きっぱなしにしないとアップロードが止まる。せむかたなし。

  • クソでかい動画(1GB 以上)アップロード不可

完了する前に サーバー側で「タイムアウトしたぞ」みたいなメッセージが出て落ちた。 処理を中断するとかではなくサービスが死ぬのはどうなんだと思うが,多分ソースコードから タイムアウトの閾値っぽいものをいじればどうにかなる。

  • プレビューがイマイチ

ブラウザから http://{endpoint}:8080 にアクセスして使うこともできるのだが, 写真のサムネイルは表示されるものの,ちょっと拡大して見たりできない。ちと残念。

  • レスポンスがチョット遅い

まあでもエントリーモデルの Android タブレットであることを考慮すればこんなものだとも思う。

こんな感じでした。

のちに Amazon Photos という容量無制限の画像用のオンラインストレージがあることを知り,Amazon Primer だったので素直にこちらを使うことにしました。ぴえん (T_T)

まとめ

ロマンがあるぞ

More articles from Kenya Hondoh

Hello, World!

はじめての投稿。

January 12th, 2020 · 1 min read

Azure の IaC 言語 Bicep とリソース設計のベストプラクティス

個人的ベストプラクティスを紹介

April 21st, 2023 · 1 min read
© 2020–2023 Kenya Hondoh
Link to $https://twitter.com/EarllibraryLink to $https://github.com/kenchonLink to $https://www.linkedin.com/in/kenya-hondoh-2a7067123/