自動アップデータ兼ランチャーを GitHub で公開してみました。
magome で作った自動アップデート機能を、目的や内側のアルゴリズムはそのままに、VisualStudio2017、boost など今のテクノロジでコマンドラインツールとして焼き直したものです。
そもそもはその当時スマホアプリとか、PCアプリの chrome とかもそうですが、ユーザーが意識することなく自動でアップデートして常に最新を利用出来る!ってイイネと思ったのが始まりです。
当時のPCアプリは(今もそうかもですが)、アップデートするときはユーザーが能動的にダウンロードしてインストーラを起動して指示に従う。というのが主流でした。
が、そんなことを意識しなくても勝手に最新になってほしいなと。(勝手にアップデートされたら困るケースがあることも承知しています・・)
Windows には ClickOnce というのもあったけど使い勝手も悪くイマイチ流行らなかった(ような気がする)し・・。
で、アプリの自動アップデートです。
差分を配信する為に配信専用データを作るための専用ツールとか、サーバーに配信用アプリをインストールとか、そういうケースを見てきました。
が、ものぐさな自分的には敷居高すぎます。なので、
手間なく!ミスなく!お手がるに!ってことを重視して以下の感じにしました。
・アップデータ作成は、アプリのファイル群を一般的なツールで ZIP に固めるだけで完成!
・配信サーバーは最低限の web サーバーで可。サーバー側に配信アプリをインストールとかは不要。
・アプリは起動時にサーバーをチェックしてアップデータがあれば勝手にアップデート。
・ダウンロードするのは更新に必要な最低限のファイルのみ。
です。
作ってみたら結構便利で他でも使ってました。
特に業務アプリでは、勝手にアップデートして常に最新、全ユーザーが同じバージョンを使うってことを有難がる場合は多いです。
これはオンラインゲームとかでもありがちな要求な気がします。
というわけで使えるケースがあれば使ってみて欲しいなと思います。
が、込み入った状況など、そのままじゃ使えない場合も多いと思いますので、そんな場合はお気軽にご相談頂ければと思います。
最後に。
C++ の仕様を作ってる方々、boost などのライブラリを開発している方々に感謝です。
WebSocket っていう単語をネットで見るようになって数年経ちますが、すごーく興味がありました。
これまで、HTTP だと不向きなケースで、BSD SOCKET や Winsock を使ったオレオレプロトコル(っていう表現が正しいかはわかりません)で実装をしていたことがありますが、この場合、サーバー側のみならず、クライアント側もソケット API のレベルから同じくらい労力かけて作る必要があります。
がしかし、WebSocket を採用することでコストダウンという可能性が増えるだけでなく、いろいろな選択肢が出てきます。
WebSocket は HTTP と何が違うかというと、一番の違いは、サーバーからのプッシュ通信は不可能だったのが(って言い切っちゃうと反論ありそうですが、そこはすみません)、WebSocket では可能になったことだと思います。
高々それだけの違いかと感じるかもですが、自分はすごーく大きいことな気がするんです。
というわけで、備忘録兼ねて C++ で WebSocket サーバーアプリのテストコードです。boost::asio を使わせてもらっています。
Windows (VisualStudio2015) 及び Linux (gcc) での実装を作ってみました。なおクライアントはブラウザ(javascript)です。
https://github.com/tr-takatsuka/TestWebSocketChat
ネットの記事などを見ると、WebSocket と言えば node.js で組むのが一番メジャーなのかなーと思います。次点で Ruby とか Python とかでしょうか。
なので、「いまさら C++ でサーバー? しかも WebSocket!?ぃゃぃゃぃゃぃゃ・・」という声もありそうな気がしますが、きっとニッチな活用場所があるだろうと思っています。
- 制御機器を作りたいが、UI はリモートのブラウザで実現できちゃえばコストダウン出来るし使い勝手もいいなぁ・・・みたいな場合。
C++ なので、BSD SOCKET さえ用意されている環境なら実装できます。機器にゴージャスなタッチパネルを搭載しなくても事足ります。
- WindowsXP でしか動かせないハードウェアがありスタンドアロンアプリしか存在しない・・でも、効率化の為、リモートのブラウザで操作したい・・・みたいな場合。
C++ なら環境固有なコードも書きやすいので、ブラウザとの橋渡しという用途もありそうです。
- 流行りの言語を使ったアプリ開発をしたいが、どうしても低レベルな制御は必要。低レベルな箇所だけは C++ で書いて、上位レイヤとは WebSocket でやり取りをする。とか。
昨今の流行り言語ならほぼすべて WebSocket をサポートしてそうです。たぶん。
- シビアなタイミングが要求されるようなケースで C++ を選択せざるを得ないが、UI はブラウザを使ってラクに作る。みたいな場合。
・・・・なんか似たようなケースを羅列したような気がしますが、そんな感じです。
今後は C++ + WebSocket も選択肢の一つとして提案していきたいなーと思った次第。よろしくお願いいたします。