ねこ的アルゴリズム

技術的な話メインの雑記ブログ

Web!スマホ!デスクトップ!すべて作れるプログラマーになるための道標

こんにちは、珍獣(@mc_chinju)です。

  • プログラマーになりたいけど、何から手をつけていいのかわからない!
  • 将来的に、 自分一人でサービスを作って公開していきたい!

そうお思いの方、割といらっしゃるのではないでしょうか?

本格的にサービスを作り、マルチプラットフォーム対応までやる場合は、ざっくり以下の知識の習得が必要になります。

実装対象 主な使用言語
Web API Ruby
Web アプリ(フロントエンド) html, css, javascript
Widows アプリ java, C++
mac OS アプリ swift, objective-c
Android アプリ java, Kotlin
iPhone アプリ swift, objective-c

んー、めっちゃある笑

こちらに挙げているのは、あくまでも一例で、別の言語を使うことももちろんあります。

これだけの知識を習得し、全部できるようになるには 果てしない時間が必要 になりそうですよね。

たくさんの言語がある中でも、今回は たった 4 つ の言語習得さえしてしまえば、その応用でマルチプラットフォーム対応したサービスが作れるようになる!ということをお伝えできればと思い、記事にしました。

それではどうぞ。

学ぶべき 4 つの言語とは

  1. Ruby
  2. html
  3. css
  4. javascript

基本的に、この 4 つです。

他の言語を学ぶな!と言っているわけではなく、

プログラマーとして仕事を掴む上でも、マルチプラットフォームのサービスを作れるようになる上でも、この 4 つを学ぶことがおすすめ!ということをお伝えしたい。

Electron

f:id:neko_aquaalta:20170808184528p:plain

Electron とは

Electron(旧Atom-Shell)とは、Web開発者がHTML5とNode.jsでMac、Windows、Linuxのデスクトップアプリを作れるクロスプラットフォーム実行環境です。 Electronはオープンソースで無料で使える上に、MITライセンスであるため、商用利用も可能です。 開発元はGitHub社です。

ざっくり言うと、html, css, javascript でデスクトップアプリを作るためのツールです。

GitHub 製のテキストエディタ Atom を使用するために作られ、Slack や VisualStudioCode といった有名なアプリも Electron で作られているなど、実績も多々あるツールです。

メリット

1 つのソースでマルチプラットフォームに対応できる

Electron の大きな強みがこれです。

Electron でデスクトップアプリを作った場合、Windows, mac, Linux どのプラットフォームであっても、基本的に 1 つのソースコードだけで対応が可能になります。

従来であれば、1 つ 1 つ別の言語を使って作っていたものが、共通のコードで書けるというのは非常に大きなメリットになります。

Web フロントエンドエンジニア人材を流用しやすい

エンジニア視点では

html, css, javascript を触っていれば、比較的低いハードルで取り組むことができる

ということですが、これは企業からしても、フロントエンドエンジニアで採用した方が、デスクトップアプリも触れることになるため、非常に大きなメリットになります。

というのも、 Windows アプリと mac OS アプリは、使用するツールも違えば、必要となる知識(言語, フレームワーク)も異なります。

となると、 必要となる人材が多くなってしまう のです。

これが、

ある時は Web フロントエンド実装、またある時は デスクトップアプリ実装 といったように、行き来できると企業側にも大きなメリットとなります。

めっちゃコストダウンに繋がりますからね!

デメリット

コードを javascript で書くため、セキュリティ、とりわけ XSS(クロスサイトスクリプティング)対策が必須になります。とにかく、ありとあらゆるところが脆弱性となりうるため、普通にデスクトップアプリを実装するのとは、かなり対策の重みが違います。

Electron 総括

XSS 対策は確かに大きな負担にはなりますが、個人的にはメリットの方が勝るかな、という印象を受けています。ぜひ使ってみてください。

electron.atom.io

React Native

f:id:neko_aquaalta:20170808184702p:plain

React Native とは

ReactはFacebookが開発したJavaScriptのフレームワークであり、React Nativeはそれをモバイルで使えるようにしたものである。

React Native は、Facebook 社のフロントエンドフレームワーク React で培った技術(具体的には、バーチャル DOM など)をベースにネイティブに描画される iOS, Android のアプリを作ることができるものです。

Facebook アプリはもちろん、Instagram や Baidu といった有名なアプリをはじめとする 500 を超えるアプリが React Native で作っている実績があるフレームワークです

メリット

1 つのソースでマルチプラットフォームに対応できる

Electron と同様、 React Native も iOS, Android どちらにも対応できるようになっています。

僕個人として、この 1 ソースで対応できることの大きなメリットの一つに

「リリースタイミングを揃えられる」 ことがあると考えています。

iOS と Android をどちらも開発していると、どうしてもリリースのタイミングがずれていきます。

iOS ではできて、 Android ではまだできない… といったケースが増えてしまうと、ユーザーにとっても正直わかりにくいサービスになりますし、問い合わせサポートにも負荷がかかります。

React Native であれば、この問題を最小限に留めることが可能になります。素晴らしい!

React の知識があれば、すんなり入れる

何度か触れている Web フレームワーク React と基本的に同じ思想で書けるようになっているため、React の実装をした経験がありさえすれば、すんなりスマホアプリ実装を開始できます。

これも、知識の流用ができるという意味で、かなり大きなメリットです。

デメリット

React の知識が前提になっている

フロントエンドフレームワーク React (さらに言うと Redux)の知識が必要になってきます。

フロントエンドのフレームワークは多種多様で、今は

  • React.js
  • Angular.js
  • Vue.js

などがメジャーです。他のフレームワークも普通に使いやすく、使用率も高いものなので、もし React を触ったことがなければ React の勉強からしなければいけません。

ですが、逆にいえばフロントエンドのフレームワークに React を採用することが大きなメリットになりうるということです。

情報が不足している

React Native でバグが起きた場合、正直ググってもあまり情報が出てきません。

プログラマー初心者には正直辛いことなので、Rails である程度トレーニングを積んでから触り始めることをお勧めします。

React Native 総括

初心者がいきなり触り始めるものではないかという印象ですが、React を学んだ先に、ネイティブアプリへの道が拓けているという事実は、非常に力強いものだと感じます。

また、Facebook が開発し、 Facebook アプリはもちろん、Instagram や Baidu といった有名なアプリが実際に利用していることを考えても、今後も発展していくのではないかと考えられます。

Ruby on Rails

f:id:neko_aquaalta:20170808200131p:plain

現状、Rails は Web API を作成するためのデファクトスタンダード となっています。

これまで述べてきた Electron, React Native などの技術は、Web サーバーと通信をしないものを作ることももちろん可能です。

ただ、例えば メモアプリを作ったとして、それを どこの端末でも同期して使えるようにするため には、自作した Web API が必要になります。

Rails は、API を作る上で最も簡単かつドキュメントや学ぶための環境も十分揃っているため、API を作るためには Rails を学べば間違いないでしょう。

まとめ

まとめると以下のような感じになります。

対象 使用言語 使用ツール
Web API Ruby Ruby on Rails
Web アプリ(フロントエンド) HTML, css, javascript (フレームワークは React を推奨)
デスクトップアプリ HTML, css, javascript Electron
ネイティブアプリ HTML, css, javascript React Native

つまり、Rails で API を作ってしまえさえすれば、新しい言語の習得という非常に高いハードルを超えずに、各種プラットフォームに対応できるという現状があります。

もちろん、それぞれメリットデメリットはありますが、プログラマーとして何から始めたらいいか?

と聞かれたときは、今でも

Ruby on Rails で、Web アプリ開発

が一番オススメできる道になります。これからプログラマーを目指す方々の参考になれば幸いです。

最後に

www.cat-algorithm.com

先日、 2 週間程度で作れるところまで作ってみた slack クローンアプリですが、今後のことを考えて React を採用しています。

今後も開発を検討していますので、

  • 開発に参加してみたい!
  • 珍獣にプログラミングを教えて欲しい!
  • フリーランスプログラマーになるために色々聞きたい!

といった方は、ぜひ LINE@ にご登録ください。

友だち追加

それでは!珍獣でした!