Mac上のファイルにAndroidからアクセスするには

#Mac上のファイルにAndroidからアクセスしたかった話

ことの発端はHTMLであるページを作っていた時の話。

当然PCでHTMLファイルを記述していたわけだが、そういや公開したらスマホでも見るかもしれないな(というか多分そっちのほうが多いだろう)と思い、(私は手持ちの端末がAndroidなので)ファイル共有して開こうと思った…

が！

私は保守や作成時にわかりやすいよう、ファイル(特にCSS)を大量に分割して記述することが多く、ファイル転送がめんどくさい！
(いや、がんばれ)

ということで、手持ちの環境でファイル共有ができないかと模索してみた。

##FTP
無知な私が最初に思いついたのはFTP。スマホのファイルマネージャーに簡単にFTPが作れる物があったからだ。

FTPとは、File Transfer Protocol、ファイル転送プロトコルのこと。
プロトコルっていうのは、Wikiによれば

>プロトコルまたはプロトコールとは、複数の者が対象となる事項を確実に実行するための手順について定めたもの。

>もともとは「人間同士のやりとり」だけに関する用語であった。戦間期の学術的批判を経て、情報工学分野でマシンやソフトウェア同士のやりとりに関する取り決め（通信規約）を指すためにも用いられるようになった。

>ーー*Wikipedia*

ということで、つまりは手順や取り決めと言ったところ。

そこで、無知な私が(2回目)FTPについて調べてみると、基本的にFTPや、その類似であるSFTP、FTPSなどはサーバー、クライアント間でファイル共有をする時に使うもの。

私がやりたいのはスマホからアクセスしたいので、もしかしたら深く調べればできるのかもしれないが、今回は断念。

##ケーブル経由
そりゃあもちろんケーブル経由も検討しましたが、それはなんかチガウので却下。

あまり調べてはいないが、ケーブル接続したら自動でファイルの同期処理とかもできるかもなあと思った。

##macOSのファイル共有
macにそんな機能ないかななんて、設定で探したら"共有"(Sharing)なんていうおあつらえ向きの設定項目があるじゃないですか。

![検索のSS](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599729/e1432457-0281-d5bb-fb27-e2bcd36a3151.png)
`言語設定が英語で申し訳ない。`

これを使ってみよう！としたのだが、ファイル共有(File Sharing)とかの項目はあるのだが、どう考えてもアドレスがandroidからアクセスできるようなものではない…

`afb://やsmb://`から始まるものであった。

調べてみれば、AFPは`Apple File Protocol`というもので、名前からしてApple独自のものだろう。

SMBは`Server Message Block`というものらしく、Windows間でのファイル共有を行うためのものらしい。

…ちっがーう！

##Android側を頑張ってみる
mac側で色々調べてみたが、どうにもうまく行かないものなので、Androidをどうにか対応できないか考えてみることにする。

###SMB?
これ気になる。
Windows間でのファイル共有ができるのならばAndroidは対応しているのでは…？

という考えに至り、ちょっと探してみたところ、ありました。

私は今まで`File Manager HD`という、ネットワーク探査などができるファイルマネージャーが使いやすくそれを使っていたのだが、残念ながらSMBには対応していなかった。

そこで見つけたのが`Cx File Explorer`。
UIが非常にFMHDに似通っているのでそそくさと乗り換え。

ちょっと使ってみたところ、UXも上々。メモリ1.8GBのスマホでも動いたので良いですねこれ。

さて本題、SMBに接続する準備をしていく。

##SMBを使用する準備

まずMac側から。

設定の共有設定項目から、ファイル共有を選択、これをオン。
![ファイル共有のSS](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599729/8150935a-832a-acd2-523b-b075ccf37942.png)
続いて、右側、共有フォルダ(Shared Folders)に、必要であれば`+`ボタンを押してフォルダを追加。

右側、ユーザー(Users)の欄に使うユーザーが追加されているかを確認。
なければ`+`ボタンを押して追加。
ファイルにアクセスするだけならば読み取りのみ(Read Only)で構わないが、書き込みとかをするのなら読み取りと書き込み(Read & Write)に変えておく。

その後、設定(Options...)のボタンからWindows共有(Windows Sharing)の下の欄にあるユーザー一覧から使用するユーザーのチェックボックスをオンにしておく。

次にAndroid側。

ネットワークを確認して、MacのあるLAN上に接続しているかを確認しておく。

##使ってみる

ファイルマネージャーからネットワーク、SMBを選択してアドレスを入力。
アドレスは上の画像(マスクしてあるが)File Sharing:Onの下の説明文のところに
`smb://192.168.11.101`
のような形で表記してある。

ユーザー名とパスワードも忘れずに匿名のチェックを外して入力し、接続。

うまく行けば、macで設定したフォルダが表示されるはずです。

##がっ…ダメ…！

しかし、私の環境ではなぜか一部のフォルダにはアクセスできなくなってしまいました。

なぜ…？と思いましたが、調べても解決せず…

なので泣く泣く他の方法を模索することに

##リモートログイン
気になったのは、File Sharingの時に数段下にあったリモートログイン(Remote Login)。

名前からして外部からファイルにアクセスできそう…！

ということで少し調べてみると、どうやらSSH暗号化を使ってアクセスするらしい…

と、ここでピンと！

最初の方に出てきたSFTPを調べていた時、説明の中にSSHという言葉が出てきたような気がしたのです。

物は試し、やってみることにしました。

##SFTP-リモートログイン
まずはMacの準備。リモートログインの項目を開いて、使用するユーザーを追加しておく。

![リモートログインのSS](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599729/18008ef7-00de-f04a-d82d-7d1029e0f361.png)

次にAndroid側から、ファイルマネージャーのネットワークから同じように追加するのだが、この時、タイプをSFTPにする。

アドレスを入力(リモートログインの下、`type "ssh ~~~~~@......"`の`...`部分)し、ユーザ名とパスワードを入力して接続。

うまく行けば、ユーザーのホームフォルダに移動するはずだ。ここから辿らなければならないのは面倒ではあるが、SMBを使うよりもSFTPを使ったほうが良いかもしれない。

##SFTPの利点

SFTPは常にSSHという方法で暗号化されている。これはSecure SHellの略で、ファイルの閲覧等からパスワードの認証など、通信のすべてが暗号化される。

SSHは共有鍵と公開鍵を使用するハイブリッド暗号化方式で、安全性が高い(…らしい)

これは感覚だが、SMBなんかより断然接続が早かったように感じる。

##まとめと補足

1. FTPは普及率は高いが暗号化が一切されておらず、パスワードなども平文で送信するため盗聴される可能性もある。しっかり調べよう
- 今度ケーブル経由での同期方法も作ってみようと思った。
 - 詳細は今度書くかも
- MacOSの機能を使って今回は解決することができたが、ちょっと調べただけではダメだね。<br>もっとしっかり調べないと。
- SMBは対応しているアプリ等が少なく、あまりおすすめできない上に、私の環境ではエラーが頻発。<br>なんだコレ。
- SSHという文字列から今回の解決方法にたどり着けたのは僥倖。<br>やっぱりよく調べておかないと。(何なら普通に調べたらこの方法出てきたけど。)
- SFTPはエラーもなく普通に快適に使えた。どうやら対応しているアプリも非常に多かった。
 - File Manager HDも対応していた…<br>今更戻す気にもならないが。
- セキュリティは大事だね。しっかり調べないと(n回目)。
- ついでに速度大事。UX。
 - UXとUIについては論じ始めたら止まらないと思うんだけど僕だけかな
- IPは再接続しても変わらないのは初めて知りました
 - いちいち再編集しなくても簡単に再アクセスできますね

今回思ったこと以上9点。

特に深い技術的な内容ではないかもしれないが覚え書きと同じようなことで躓いた人に。
浅い調べ方だったり調べ方違ったりすると出てこないからね。