テレワークをより快適にするソフトウェア n 選


本記事は [「Develop fun!」を体現する Works Human Intelligence Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi) の12月22日の記事です。


昨日の記事は [@autotaker1984](https://qiita.com/autotaker1984) さんの [新卒１年目が荒れ果てた開発環境に１年間でCIを導入し単体テストを布教した話](https://qiita.com/autotaker1984/items/894bf0df0009c621da11) でした。

この記事のとおり、弊社の開発環境は快適とはとても呼べないものでした。しかし会社が分社して以来社内の空気が変化したこともあり、こうした改善運動が各所で活発に動いているのはとてもありがたいことだと思います。


## はじめに

本記事では、私が普段愛用しているソフトウェアから、テレワークをより快適にするために活用できそうなものをいくつか選び、それぞれの特徴や業務での活用案についてご紹介します。

選定基準としては、

 - オープンソースソフトウェアである
 - 主要な OS 、それに加えて可能ならばモバイル環境でも動作する
 - 筆者が実際に使ってみて、仕事にも使用できる品質だと感じている

といった点を重視しました[^actually]。

[^actually]: ちなみに、下記で紹介するソフトウェアは全て、私自身は実際に業務には使用して**いません**。SyncthingとかSoftEtherとか、業務でこっそり使ってると疑われたらまずいものも多いので念の為。本記事は社内の人に、こういうソフトウェアがあるよというアピールを兼ねてます。

## Syncthing
[Syncthing](https://syncthing.net/) はPC間のファイルを自動的に同期するソフトウェアです。

### 特徴

 - オープンソース（ライセンス: MPL v2）
 - Dropbox や Google Drive に近い使い勝手
 - 同期するコンピュータ同士を P2P で接続するので、常時稼働のサーバが不要
 - マルチプラットフォーム対応に力を入れており、あらゆる主要 OS で使用できる
 - 通信が e2e で暗号化しており、ネットワークの安全性に不安がある場合でも使用可能
 - UPnP 対応ルータならば、ポート開放を行わずに接続が可能であり、UPnP が使用できない場合でも、リレーサーバを介した接続が可能
 - Resilio Sync [^btsync] と異なり独自のプロトコルを使用するため、いわゆる P2P ファイル共有ソフトの通信を監視するソフトウェアに誤検出されるリスクがない

[^btsync]: 旧 BitTorrent Sync。ファイルの違法共有に悪用されているソフトウェアである BitTorrent のプロトコルを使ったファイル同期ソフト

### 業務での活用案

 - チーム間でのファイル共有
 - サーバを一台建てておき、ファイルの自動バックアップに使用
 - 会社内のデスクトップPCとリモートワーク用のノートPCでのファイルの同期

### 備考

 - 一般的なPCで使用する場合、Syncthingを直にインストールするのではなく、GUIラッパー[^syncthing-gui] 経由でのインストールをおすすめします。
 
[^syncthing-gui]: Windows ならば [SyncTrayzor](https://github.com/canton7/SyncTrayzor/releases/tag/v1.1.24) など

## RClone

[RClone](https://rclone.org/) はクラウドストレージの汎用クライアントです。

### 特徴

 - オープンソース（ライセンス: MIT）
 - Amazon S3, Google Drive, Microsoft OneDrive, Dropbox といった40以上のクラウドストレージサービスに対応
 - HTTP や SFTP などの一般的なプロトコルをクラウドストレージと同様に扱うことが可能
 - 単純なアップロード・ダウンロードだけでなく、クラウドストレージを仮想ドライブとして利用することが可能
 - ファイルのローカルキャッシュや暗号化に対応
 - 主要なOSで利用可能

### 業務での活用案

 - Google Drive での Linux など、公式クライアントがないサービス/環境の組における公式クライアントの代替
 - 複数のクラウドストレージを同時に扱っているケースで、それらを統一的に扱う
 - 別のクラウドストレージに移行する際の省力化
 - SFTP などの一般的なプロトコルで、クラウドストレージの内容を LAN 内に公開する

### 備考
 - 随分前に Windows + Google Drive で暗号化ありの仮想ドライブマウントを行った際は、不安定かつ低速な点がだいぶ気になりました。今は改善しているかもしれせん。

## ShareDrop
[ShareDrop](https://www.sharedrop.io/) は、ブラウザベースのファイル交換ソフトです。

### 特徴
 - オープンソース（ライセンス: MIT）
 - ブラウザベースなので特別なソフトウェアをインストールする必要がない
 - ブラウザ間でP2Pにファイルの受け渡しが行われるため、第三者のサーバを経由しない
 - 同じ LAN 内にいる相手へのファイルの送受信が非常に簡単
   - 送信者と受信者がそれぞれのPCから "sharedrop.io" にアクセスし、ファイルを送りたい相手のアイコンをクリックするだけ
 - 別の LAN にいる相手へのファイル送信にも対応

### 業務での活用案
 - 共有ドライブに置いたり、Slack や メールで送るまでもない、ちょっとしたファイルを他人に共有する

## gocryptfs
[gocryptfs](https://nuetzlich.net/gocryptfs/) はファイル暗号化ソフトです。

### 特徴
 - 暗号化前のファイルを普段どおり編集・保存すると、ディスクには暗号化されたファイルが保存される
 - TrueCrypt などと異なり、平文ファイルと暗号化ファイルが一対一対応する
   - そのため、ファイル同期ソフトなどと併用した場合に、編集したファイル（が暗号化されたファイル）のみを同期すれば良いという利点がある
 - 脆弱性がすでに知られている有名ソフト、 encfs の後継となりうる
 - 第三者による[セキュリティ監査](https://defuse.ca/audits/gocryptfs.htm) が行われている
 - gocryptfs 自体は Linux と macOS のみに対応しているが、 Windows 向けの互換ソフトとして [cppcryptfs](https://github.com/bailey27/cppcryptfs) というものがある

### 業務での活用案
 - 検閲やデータ剽窃のおそれがあるクラウドストレージにファイルを保管する
 - 機密データを常時暗号化して保管することにより、機密漏洩リスクを低減させる

### 備考
 - 似た特徴を持つ競合としては、他にも [Cryfs](https://www.cryfs.org/) や [SiriKali](https://mhogomchungu.github.io/sirikali/) などがあります。本格的に導入する際には、これらとの比較検討もされることをおすすめします [^gocryptfe-competit] 。

[^gocryptfe-competit]: 随分前にこれらと比較検討した結果 gocryptfs/cppcryptfs を選んだのですが、その理由を忘れました……。

## SoftEther VPN
[SoftEther VPN](https://ja.softether.org/) は、[天才プログラマー](https://www.itmedia.co.jp/news/articles/2011/06/news043.html)登大遊氏[^softether_author] が中心となって開発した VPN [^vpn] ソフトウェアです。

### 特徴
 - オープンソース（ライセンス: Apache2.0）
 - OpenVPN や MS-SSTP などの主要な VPN プロトコルを網羅している
 - すべての主要 OS でクライアントソフトのインストールが不要
 - 執拗なまでに高度なファイアウォール貫通能力
 - サーバの設定がとても容易

### 業務での活用案
 - 自宅PCから社内ネットワーク内リソースへのアクセスを可能にする
 - 公衆無線 LAN などセキュアでないネットワークを使用して業務を行う
 - 物理的に離れた複数拠点のネットワークを仮想的に接続する

[^vpn]: 通信の暗号化によりインターネット上に安全な通信路を作り、インターネット越しにプライベートネットワークに接続したりする技術
[^softether_author]: AC の中の AC

## おわりに

いかがでしたか？？ [^いかがでしたか] 
本記事では、テレワークの役に立ちそうなソフトウェアをいくつか紹介しました。本記事が、皆さんの生産性向上の一助となれば幸いです。

昨日と一昨日の記事の著者がどちらも社内きっての Haskeller だったため、 もし Haskell の記事が2連続で来たら、本記事も Haskell 関連のことを書かなきゃいけないのかなーと怯えておりましたが、どうにかそうならずに済んで安堵しております。

アドベントカレンダーは勢いで登録だけしたものの、当初はネタが思いつかず、いつもどおり Rust か 言語実装関連で攻めるかと考えていました。

その中で、最近やった人様にお見せできそうな活動が、 Rust で [Algorithm W](https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system#Algorithm_W) とテスト用の AST 記述マクロをかなり綺麗に書けたことくらいなので、最初はその記事でも書いてごまかそうかとも思いました。しかし Rust も型推論も関心ある読者の数が少なく、万人にとって役に立ちうる記事になるとは言えない[^poem] ため、アドベントカレンダー記事くらいは多くの人の役に立ちそうな記事を書こうと思い、不採用としました。

その後、多くの方に興味を持っていただけるようなテーマについて検討した結果、ベランダの西洋アサガオがつい先日まで健気に咲いてくれていたので、当初はアサガオの観察日記とする予定でした。
![この前まで咲いていた西洋アサガオ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632019/bf0d8a86-23df-ce6b-d8f8-7b461da25889.jpeg)
しかし執筆時点（12/21）ではもう一輪も咲いていない状態になってしまったため、こちらの案は中止することとし、急遽この内容とすることにしました。

最後に、本記事で是非ご紹介したかったものの、いくつかの理由から惜しくも選外となってしまった物としては、

 - 高速リモートデスクトップソフト [Brynhildr](http://blog.x-row.net/?p=2455) （ Windows 限定、かつサーバ部分はオープンソースではない）
 - 公開鍵暗号方式のメッセージ暗号化・署名サービス兼 PGP クライアント [Keybase](https://keybase.io/) （セキュリティ周りで何かと話題の Zoom 社に買収されてしまった）

といったものがあります。これらもとてもいいソフトウェア・サービスですので、ここで紹介させてください。

[「Develop fun!」を体現する Works Human Intelligence Advent Calendar 2020](https://qiita.com/advent-calendar/2020/whi)、明日23日は [@goamix](https://qiita.com/goamix) さんの記事です。どうぞお楽しみに。

[^いかがでしたか]: これが言いたかった
[^poem]: ~~あと、苦労して書いた記事が10分で書かれたネタ記事に負けるのを見ると心が折れる~~