ふんわりした生活

本を読んだり仕事でやってみたことなどの日常から、ふんわりと気づきなどを書いていきます

古来より伝わるUWSCなる自動化ツールに驚いて構文ハイライト用のVSCode拡張もつくった

ずっとWindowsで作業の自動化なんかをやるとしたら、Officeスイートに付属しているVBAWSH、あるいはPowerShellくらいのものだと思い込んでいた。そこまで来たら、VB.netでもさらっと書いてvbcでコンパイルしたほうがいいやと思っていたところだった。

以前からクラウドワークスなんかの募集で見かけていた「UWSC」というのが気になって調べてみたところ、これがかなりのものだった。 勢いでご紹介したい。

UWSC

どうやらわたしが知らなかっただけで、かなり昔から存在している自動化ツールのようだ。 おもしろいのは、マクロのように操作を記録して(むかしVectorとか窓の杜にあったような気がしなくはないが)スクリプトにすることができるという点だ。有償バージョンだと実行形式にもすることができるらしい。

UWSC

無償版のほうはダウンロードしてきたら解凍して実行形式をダブルクリックするだけでつかうことができる。インストールが不要でWindows10でも動作するというのは素晴らしい。さらに、サンプルが公開されていて自動クリックなどの無人操作はもちろんFireFoxChromeといったブラウザの操作もすることができる。恐ろしいことに、COMやDLLについても利用できるということなので、そりゃこれでいろんなこと考える方もいるよね・・・と思った次第。

サンプル

見た感じはVBAに似ている。変数宣言は無理にする必要はなく、代入したら使うことができる。動画用に棒読みするスクリプトを書いてみたのだが、割と面白かった。

const speakerfile = "C:\Users\hoge\Desktop\speak.txt"
try
    fid = fopen(speakerfile)
    try
      for line = 1 to fget(fid, -1)
        comment = fget(fid, line)
        if length(trim(comment)) = 0 then
          sleep(2)
        else
          speak(comment)
        endif
      next
    except
      print try_errmsg
    endtry
finally
  fclose(fid)
endtry

なんとなくイメージがつきそうなものだ。一行目はデスクトップにある読み上げ用のテキストファイルパスを定数として宣言している。次からはファイル操作でエラーが発生したときのために必ずファイルを閉じるようにする「try - finally」ブロックだ。ここはVBAに比べてもかなりいい。VB.netになるまでtry - catch -finallyは使えなかったので。

ファイルの操作もCっぽいというかrubyっぽいというか。上記のスクリプトでは空行があったら一呼吸ついてもらうために2秒のスリープを入れている。棒読みしてもらうのはSPEAK関数に文字列を渡すだけ。ものすごく便利。

これだと例外処理が面倒かつできることが限定されているVBSを使ったり、新たに文法を覚えなおす必要のあるPowerShellを利用することなく自動化を図ることができるということだ。素晴らしすぎる。ただ、どう考えても日本でしか使われていない。サクラエディタなど、日本でつかわれている有名どころのテキストエディタだと、構文ハイライトできるものを公開している方がいらっしゃるようだ。

覚えることも非常に少なそうなので、データベースをつかったり大量にデータをさばく必要がある、という用途でなければExcelを起動するよりこれを使ったほうがいいかもしれない。

VS Code Extensionをつくってみた

感動のあまり、いろいろ書いてみようと思ったのだけどVisual Studio Codeにはハイライトできるものがなさそうだった。それにどんな関数があるのかも調べたかったので、ヘルプを見ながらVS Code用の拡張をつくってみた。公式のヘルプだと関数などはすべて大文字で記述されているが、どうも大文字小文字の区別はないようなので小文字オンリーと手抜きになっている。

marketplace.visualstudio.com

以前にもマークダウン用に文字数をカウントする拡張を自作したことがあったが、構文ハイライトだけならJSONファイルを編集するだけという簡単さから自作のモチベーションは機能的なものよりずっと高まりやすいということもわかった。

また、Yeomanによるジェネレータのおかげで編集すべきファイルはたったの2ファイルしかなかったことも驚いた。簡単。公開も死ぬほど簡単だったので、もっときちんと作ればよかったと後悔している。

f:id:m0t0k1m0t0k1:20170328163006j:plain

かなり柔軟かつ高機能なUWSC

個人的にうれしい誤算だったのは、UWSC標準でPowerShell連携をサポートしているというところだ。TextBlockで複数行テキストを作成して、この中にPowerShellスクリプトを記述することができる。すると…恐ろしいことにPowerShellスクリプトを実行することができる。

実行ポリシーとかなにそれ?というところではある。ただ、どういう実行の仕方をしているのかわからないがプロファイルは読み込まれている。プロファイルが邪魔になるケースでは回避の方法がなさそうだ。以下はGet-ChildItemコマンドレットで現在のフォルダ内にあるアイテムの数を出力するサンプル。ps1というテキストブロック変数の文字列をPowerShell関数で実行しているものだ。

print powershell(ps1)

textblock ps1
$a = ls
$a.Count
endtextblock

なお、別のUWSCスクリプト(*.uws)を読み込んでつかうこともできるようなので機能で分割することもできる。プロシージャ、関数、クラス定義などにも対応している(クラスは実体化することはできないので、なでしこっぽい?)。

Pro版では実行形式ファイルにすることができたり、フォームの生成やExcelを関数から操作することができたりするようだ。当面は無償版でいろいろいじってみたい。

もしも3日間のうちにVBAでツールをつくれるようにしなければならないとしたら

何を教えるべきか、というお話です。イメージするとしたら、月曜日から教えはじめて木曜日、金曜日で最初のツールをひとつ完成させるという感じ。 もうこれ以上、メンテナンスできないクソマクロを増やさないで!!と強く願う方もいらっしゃると思いますが、ここはそういうことを置いておこうと思います。ごめんなさい。

実際のところ、勘の良い方であれば3日もかからないと思います。簡易的な電卓みたいなものならプログラミング初心者でも同じくらいでつくることができるのではないかと思います。ですが、正直言ってVBAは覚えることが多すぎると思っています。だから覚えるだけで一苦労、なんだよ構文エラーって・・・さらに配布後のメンテナンスも非常に面倒です。

WordやPowerPointだと、見た目を制御するためにはそこそこコードを書く必要があります。ExcelAccessはデータの塊を表現したソフトウェアなので、軽く数行のコードだけで動くものができてしまう、というところが長所であり短所でもあります。とかなんとかダラダラと書いていくのもアレですので、もしも3日間でつくれるようにしなければならないとしたらというお話に移ります。

初日

まずはどのOfficeソフトウェアを選択するか、というところから始まります。ですが、ここはもちろんExcel一択です。たいていの場合、WordやPowerPointを自動化したいと思うことは少ないでしょう。なんらかのデータが大量にあるいは高頻度で存在していて、「この山をどうにかさばきたい」というのがモチベーションであることが多いはずです。ですからExcelを使います。古いVistaくらいのPC(もうすぐサポート終了ですね)でも国内大手メーカーさんのものだとPersonal Edition(WordとExcelだけ入っている)というOfficeがプリインストールされていたと思います。

1時間目

ということでExcelを起動してもらうことになるのですが、次にやるのはVBEの起動です。Visual Basic Editorですね。AltキーとファンクションキーF11を同時に押すことで起動してきます。そうしたらざっくりと画面の説明をします。画面左上のプロジェクトエクスプローラ、その下のプロパティダイアログ、画面中央のエディタ領域、その下のイミディエイトウィンドウです。それぞれの役割を簡単に説明したら、次は動かしてみるためにサブプロシージャの大枠だけ書いてもらいます。こんな感じに。

Sub macro()

End Sub

ここはサブプロシージャの名前以外ほとんど自動で書いてくれることを体感してもらって、なんだ、大したことねぇな、ビビらせやがってと思ってもらうのが第一です。そうしたら次はMsgBox関数をつかってメッセージダイアログを表示させてもらいます。ここで苦手意識が発生しないように注意します。そうしないと、このあとの説明が大いに時間を要することになるうえ、理解も進まなくなるためです。

MsgBox関数で何かを表示させることができたら、続いてDebug.Printメソッドでイミディエイトウィンドウに何かを表示させます。マクロが動作しているときにどんなことが起きているか、を知ろうとすることになるので軽く説明しておきます。いわゆるHello World的なものですね。

2時間目

たいていの企業では、この2時間目を初日に確保するのは非常に困難だと思われます。というのも、ただでさえ時間外労働を強いられるのにこんな時間を確保できるとは考えにくいからです。ですが、ここでは確保できたとして話を進めます。そうしないと話が進まないので…

この時間では、構文そのものを学んでもらうのではなくあらかじめ用意した形をコピペしてもらうようにします。たとえば、データをいったんどこかへ置いておきたい!となったら変数の出番です。しかしどのように宣言すべきか?という説明をしていたのでは時間が足りません。そこで、これをコピペして名前だけ変えようというようにします。ひどいですね。

Dim 変数名

データ型はどうした!?と驚く方もいらっしゃるかと思いますが、最初はあまり厳密にせずに完成できるようになるところまでを説明して身に着けてもらいます。そのため、そうしたこともこの時点では省略していきます。JavaScriptPHPrubyでもデータ型は明示してない(もしくはできない)ことが多いですよね。

これらコピペを駆使してなんとか1から10までをイミディエイトウィンドウに出力したり、3の倍数のときだけ別のものをイミディエイトウィンドウに出力したりするところまでいきます。パーツを組み合わせるイメージです。

3時間目

もはやここまでくると、かなり教育熱心な企業でしか耐えられないかもしれません。大手企業の新入社員教育とかでなければ確保できないかな?3時間目では2時間目までの「コピペ駆使」を使って、演習をします。2時間目にやったものと同じサブプロシージャを名前を変更して自分で写経して実行するとか、コード中に「10」とか数値を直接書いてあるところをほかの数値に変えてみるとかです。

正直言うと、この演習の時間が取れるかどうかでつくれるようになるかどうかが決まるでしょう。コピペでも一度以上、その組み合わせに出会っていなければすぐにその組み合わせをして問題を解決しようということになりません。結果として時間ばかりが過ぎていくことになります。そこで、この演習では組み合わせを変えてみたり条件を変えてみて何度も繰り返し実行することがポイントになります。

Sub macro()
  Dim count
  For count = 1 To 10
      Debug.Print count
  Next
End Sub

こういう断片でも動くものを形を変えて何度もやると、「条件をわけるときはこう」「くり返すときはこう」というのが見えてきます。

二日目

二日目になると、2つのことをできるようになる必要があります。それは、

  1. シートからデータを取り出す、セットする
  2. ブックを開く、保存する

ここもコピペでパーツを組み合わせる練習を繰り返します。これらを行うために避けて通れないことが、オブジェクトを変数に格納することです。

Dim sheet
Set sheet = ThisWorkbook.Worksheets(1)

このあたりでどれがオブジェクトの変数なのかわからなくなってくると思うので、データ型についてよく使うものを中心に説明します。最低でも次のものだけ練習しておくといいでしょう。

  • Integer
  • Long
  • String
  • Double
  • Workbook
  • Worksheet
  • Range

そのほか、Withをつかってオブジェクトを操作することにも慣れておくといいでしょう。あまり高速でないイメージが勝手にありますが、オブジェクトをひとまとめに操作できるので便利かつわかりやすいですね。

With ThisWorkbook.Worksheets(1)
    .Name = "nalulabo"
    .Range("A1").Value = "1234"
End With

さらに、オブジェクト変数の「Empty」と「Nothing」「Null」についても理解が難しいので軽く押さえておくと後が楽になります。違いとしてはざっくり説明すると次のとおりです。

説明
Empty オブジェクト変数になにも詰め込まれていない状態
Nothing 「何もない」を表す特殊なオブジェクト
Null データのある場所がゼロ番地

Setステートメントを使っていない、宣言しただけのものはEmptyの状態になります。状態をチェックするには「IsEmpty」関数を使います。Nothingが詰め込まれているかどうかは変数がNothingかどうかを「Is」ステートメントで確認します。Nullかどうかは「IsNull」関数を使います。それぞれ値なのか、状態なのか、変数データのある場所なのかということで違っているので混乱しやすいですね。

Public Sub macro()
    Dim aaa
    Set aaa = Nothing
    If IsEmpty(aaa) Then
        Debug.Print "empty"
    ElseIf IsNull(aaa) Then
        Debug.Print "null"
    ElseIf aaa Is Nothing Then
        Debug.Print "nothing"
    End If        
End Sub

なお、オブジェクト変数にNullが詰め込まれるにはSetステートメントを使わずにVariant型の変数へ代入するしかないので、EmptyかNothingかをチェックすると十分でしょう。

1時間目

シートの操作を簡単に説明する時間にあてます。シートの特定の仕方を4種類説明することから始めます。シートは(1)Worksheetsコレクション(Excelを見ながらタブを示して)を順番に探す方法、(2)アクティブになっているシートを使う方法、(3)シートオブジェクトを利用して特定する方法、(4)Worksheetsコレクションからシート名で特定する方法です。

それぞれ一長一短ありますのでざっくりとだけ説明します。

No. 方法 メリット デメリット
1 Worksheetsコレクションから順番で 操作対象が左から何番目かわかれば簡単 シートの並びが変わると対象が変わってしまう
2 アクティブになっているシートで ActiveSheetオブジェクトでサクッと利用できる 選択されたシートが変わると対象が変わってしまう
3 シートオブジェクトで 狙ったシートを直接利用できる 新規追加したものはオブジェクト名がわからない
4 Worksheetsコレクションからシート名で シート名がわかれば直感的 シート名が変更されると見つけることができない

どのように操作したいかで方法を選択するとよいでしょう。

また、セルの参照方法としてはRangeオブジェクトのみになります。Cellsコレクションなどを使っても結果的にRangeオブジェクトが返されるのでRangeオブジェクトをつかうと間違いないです。また、省略できる標準プロパティというのがあって「.Value」を省略していることがありますが、ややこしいので省略しないほうがクソマクロになりにくいでしょう。

2時間目

2時間目はブック操作です。別のブックを開く、新規でブックを作成する、ブックの変更を破棄して閉じる、ブックを保存するといったところです。ブックは開いたり新規に追加するとWorkbookオブジェクトが返されるので、オブジェクト変数へ詰め込むかWithステートメントブロックで操作するようになります。Withのほうが便利ですが、どうしてもほかのブックも同時に操作する必要があることもケースとしてはあります。そのため、ブックもオブジェクト変数へ詰めておいたほうがわかりやすくなります。混乱するとブックもコードもぐちゃぐちゃになりますので。

ブックの変更を破棄して閉じるには、ブックのCloseメソッドにFalseを渡すと実現できます。つけない場合はファイル保存ダイアログが表示されるので、逆に確認してほしい場合はFalseを渡さないようにします。

ブックの保存はブックのSaveメソッドを使います。ほかにもCSVなど形式を指定して保存するSaveAsメソッドもありますので、PDFをつくって遊んでみるとよいでしょう。また、すでに同じ名前のブックがファイルとして存在するかどうかなどについても、ここでさらりと説明しておくといいですね。

3時間目

ここまで学習した内容をつかっていろいろ遊んでみるという演習をするとよいでしょう。質問を受け付けてセルの背景色を塗ったりフォントサイズを変えたり枠線をつけたりといったこともやってみると、より複雑な操作をすることができるようになります。また、複数のセルをもつある範囲から一気にデータだけを取り出す方法として配列を紹介してもいいですね。表の形にデータを整形してやることでワークシートとマクロの間で高速にデータのやりとりができるということも体験するといいでしょう。

このほか、セルやセルの範囲に名前を定義する(Excelのほうの)説明をすると、Rangeが非常に便利になることも説明できるとなおよいですね。行や列を頻繁に追加削除しても名前をつけておくと(名前を付けた範囲が削除されなければ、ですが)セル位置ではなく名前で参照できるようになります。

三日目

いよいよ最終日です。てんこ盛りに詰め込んだので完全に消化不良だと思いますが、ここからは応用というかツールとして完成させることができるようになるための仕上げの話です。

マクロの実行をユーザーにどのように開始してもらうか、これを決める必要があります。方法はいろいろあるのですが、よくあるのはExcelの図形オブジェクトをペタッと貼ってマクロを登録するとかでしょう。こうした内容を簡単に説明して演習を行っていきます。 もしもアプリのようなフォームが必要である場合はフォームの説明をすることになりますが、ちょっとした操作にそこまでの準備が必要かどうかで後日の学習にするかを考えるとよいです。

だいたい、このあたりまで来ると書籍やウェブの情報を元に自分で学習していくことができるようになっているはずです。ここからは独学でもよいでしょう。

これは教えないのか、教えなくていいのか

3日間で3時間ずつしか確保できないとして、最低限だけを説明していくと上記のような感じになるのですが、それじゃあクソマクロ量産体制に入るだけだろうということはあるでしょう。たとえばスクリプトの分割です。1つのサブプロシージャで長々と書いていくと、自分でも読みづらくなります。他人はさらに読めない状況になります。そうしたときに分割が必要になります。しかし、最初から分割を意識させてしまうとプログラマでもない方には混乱のもとですので、そこは考えずに走り抜けてもらうことにするということです。ひととおり動くようになったあと、コードを読み返してもらい、意味のあるまとまりとしてコメントを入れていくと分割の仕方がわかりやすいのではないでしょうか。

このほか、関数もそうですね。サブプロシージャは値を返すことができませんが、関数は値を返すことができます。これまた使い方というか用途が理解できなければ混乱のもとなので避けました。クラス定義もそうです。

さらにテキストファイルの読み書きも普通のプログラミングでは学習しますが、Officeスイートを利用するという時点で対象もOfficeのことが多いです。そこでテキストファイルは独学の範囲にすることにしました。プログラマの方は3日間のどこかで学んだほうがいいですよ!もうひとつ、COMの利用もあります。プログラマの方は学習必須になると思いますが、こちらも同じ理由で除外しました。

もっと基本的なこととして、定数はどうした、というのもあるでしょう。あとから値を変更することができないものなので、コード中に直接書いてしまっている数値などはこれにするべきですよね。これはある程度の演習をしてからのほうが、定数という機能の効果をより理解できてよいと考えるます。もしどこかへ入れるとしたら三日目の演習時がよいでしょう。

おススメの書籍とかないのか

私自身もExcelマクロの入門書を電子書籍で出版しているのですが、正直申し上げておススメしたい書籍はありません。というのも、どれを買ってもらっても書いてあることはおおよそ同じだからです。よってもし購入を考えているのであれば、次のことを念頭に置いていただくと選びやすいと思います。

  1. 簡単なところから順番にやりたいか
  2. 辞書のように逆引きして「やりたいこと」から学びたいか
  3. 特定のある機能だけ学びたいか

もし上記1であれば、ブルーバックスだったかで出版されている入門書がよいでしょう。ほんとうに簡単なところから説明されているので、少しずつ時間をかけて学ぶにはとてもよいはずです。逆に上記2のように「何かしらつくりたいもの」があって、それをつくるために必要な事柄から、どうやって書いていけばよいかを学ぶのであれば逆引き辞典のような書籍を選ぶとよいです。また上記3のように、すでに何かつくったことがあって、その経験を補足・補強する目的であればVBAでは書籍を選ぶ必要はありません。MSDNなどMicrosoft社が公開しているドキュメントをお読みになるべきです。

最後に

思いのほか長文になってしまったことを深く反省しております。VBAは非常に便利でパワフルなツールです。おかげでPowerShellがイマイチ伸び悩んでいるような気がしなくはありません。

もしVBAのようにドキュメントと一緒になってしまって管理しにくいのが嫌だ!ということであればPowerShellはおススメです。 いろんなもの(プログラミング言語やツール)のキメラっぽいものですが、VBAを覚えてからであれば使い勝手の良いツールになると思います。

わたしはマクロよりもテキストファイルで動作するVBScriptのほうが好みで、10年以上前からそっちでばかりツールを書いていました。あまり画面があることにこだわっていなかったからかもしれません。VBScriptも昔はマルウェア用のツールというイメージもあったと思いますが、いまはPowerShellがその担当をしてくれています。VBSネタもまたエントリしてみようかな。

こんなのもあります。

note.mu

satoyama-editorをマテリアルデザインにしたけど素朴すぎる

これがマテリアルデザインか

最近、数年ぶりにGoogleフォームをつかってみたのだが、マテリアルデザインになっていた。そこで、どんなものかGoogle謹製のCSSフレームワークを利用してみた。すると、ものすごくandroidっぽすぎる状態になった。なるほど、これがandroidのUIにも使われているからああいうデザインなのか、とうなずいた。

androidアプリを学んでみて、デザインのことが気になっていたものがある。以前作っていたsatoyama-editorだ。牧歌的な洗練されていないものを目指してつくっていたこともあるが、かなりのものになっていることは心のどこかで気になっていたところではあった。そこで、マテリアルデザインをあててみてはどうか?ということを今朝唐突に思いついたのでやってみることにしたのだった。

マテリアルデザイン

フラットデザインのさらに先、というか物理法則にしたがったデザインらしい。わたしはデザイナーでもないので「へー、そうなんだー」としか感じられなかったわけだが、見た目にすっきりしそうなので採用!ということにした。

軽く調べてみたところ、Googleの提供しているMaterial Design LiteというフレームワークのほかにMaterialize.cssというのもあるようで、数種類が存在しているようだった。今回はどうせそういったものに依存するならこだわりなし、ということで公式サイトをパッとみた感じでMaterialize.cssを採用してみた。 かなり修正が必要かな、と思いつつもざっくり直しにかかったところ、30分程度であらかた修正が完了した。もともとが込み入った構造をしていないものだからというのもある。

なお、MaterializeはjQueryに依存している。でも今回はjs部分にjQueryの必要性を全く感じなかったので読み込むのみにしてある。しかもソースコード内に入れておく必要もないだろーと思いすべてCDNからの読み込みとしている。

ついでに

フッター、ほんとうに必要かな?と考えてフッターも削除してやった。コピーライトとか書いておいたけど、いらない。全然いらなかった。なくなったらすげーすっきりしたし、気にせずガンガン書いていけるようになった。

こんな感じになった。 f:id:m0t0k1m0t0k1:20170327102639j:plain まだElectronアプリにはしていない。コードが散らかっているのでガンガン不要なものを削除してからコンパイルするつもり。

DropBoxのPublicフォルダが普通のフォルダになってた

以前からDropBoxのPublicフォルダに画像ファイルなんかを置いておき、tumblrでブログを投稿するときにはそれらファイルの公開リンクを取得して画像を表示させていたのだが…どうやら今年2017/3/15をもってPublicフォルダは普通のフォルダになってしまったようだ。

しかし、対処法はあって共有リンクというのを作成すること。以前はPublicフォルダ内のフォルダパスみたいなものもURLに含まれていたけどIDみたいなものに変わったようだ。

https://www.dropbox.com/s/(任意の英数字16ケタ)/(ファイル名)?dl=0

デスクトップアプリなどでファイルを右クリックすると「DropBoxリンクをコピー」というメニューがいつのまにか表示されるようになっていた。 これで上記のようなURLがクリップボードに貼り付けされる。

ただ、このままを使うとDropBoxのページでファイルを見るだけになる。そこで、最後の「dl=0」を「dl=1」にする。こうするとファイルが直接ダウンロードされるようになる。試しにtumblrで公開リンクで貼り付けていた箇所を「dl=1」にした共有リンクに変更してみたところ、404エラーになっていた画像が表示されるようになった。

このまま過去の記事を延々とリンク差し替えしていくべきかどうか悩むところだけど、そこまで大事な画像があるわけでもないのでこの際にブログを整理してもいいかな、とも思う。

さらに、今後のものは書籍っぽいものはGitBookを使ってもよいと思うのでtumblrは徐々になくしていくかな。

www.dropbox.com

40代を目前にして学ぶAndroidアプリ開発 - はじめたよ編

f:id:m0t0k1m0t0k1:20170313111148j:plain

実はいまAndroidアプリ開発を独学している。つい最近までスマホアプリにまったく興味がなかったのだが、息子たち世代がもっとも触れているコンピュータを考えるとそれはスマホであるということを痛感したため学習をはじめることにした。

無償サービスを求めて

ここ最近、無償で学習することができるサービスをいくつか見て回ってAndroidアプリの開発を独学できるところを探していた。もちろん一番最初に見たのはドットインストールだ。Android開発をさらっと見ることができた。と言っても、ほんとうにさらっとしていて、これで何かを得られたわけではなかった。もし得るものがあったとすると、1つ目の動画で教えてくれるAndroidアプリ開発者向けのポータルをGoogleが用意していることだ。そうか、こんなのあったんだ、という気づきであった。

https://developer.android.com/index.html

そしてさらりと動画でどんなものか見てみて、「ああ、iOSアプリとかとだいたい同じっぽい雰囲気なのかな」と勝手に思いつつさらに無償で独学できるものを探していった。無償を優先的に探したのは、息子が自分で調べて学習するときにクレジットカード情報が必要になったりするとモチベーションが低下して「めんどくせぇ」となってしまうからだ。最初は無償ではじめることができるに越したことはない。

探していくと、PDFで書籍を公開している会社を見つけた。かなりのボリュームで、書籍として販売していてもおかしくなさそうなものだった。

Tech Institute アプリ開発者養成講座テキスト
http://techinstitute.jp/material/02/

ここのPDFにはJavaの初心者向けのテキストから、実際にAndroidアプリを開発してみることができる内容まで幅広く書かれたものが公開されていた。ライセンスはクリエイティブコモンズ。こちら、小学生が読むにはちょっと難しそうだったが中学生以上だともしかしたら読んで理解することができるかもしれない。1点だけ困るのが、2015年に公開されているようで、すでにテキスト内でつかわれているコードが現在のAndroid最新バージョンでは使わないことになっているものがあるところだ。しかもかなり初歩段階で登場してしまうので「ぐあっ」となってしまう。

こういう書籍がアップデートされないことによってモチベーションを低下させてしまうのも、かなりもったいない。自分の電子書籍がずっとアップデートされていないことを棚に上げて言うのは非常にアレなのだが、こうした最新バージョンが次々と登場するものを書籍としてパッキングするのはなかなか勇気のいることだと思っているので、最新化されるといいな、という気持ちではある。

結局

結局のところ、どこの無償サービスがよかったかというと、個人ではUdacityというオンライン学習サービスにGoogleが用意している無償コースがもっともよさそうであった。

Android Development for Beginners by Google
https://www.udacity.com/course/android-development-for-beginners–ud837

英語にも関わらずかなりわかりやすい。ほとんど完成しているプロジェクトと正解例として完成しているプロジェクトの両方を一式ダウンロードすることができる。Githubに公開されているので、ブラウザでコードを見ることもできる。

なにより、Androidアプリ開発者向けポータルにそのコースが紹介されているので、そこから入っていくことができたのは探し回る労力が多少軽減できてうれしいかぎりだ。

https://developer.android.com/training/index.html

Androidアプリ開発を独学しはじめて気づいたこととしては、Javaを少しでもかじっていたら参入することがたやすいということがある。Javaを選択したのは単純にC#が当時まだオープンソースでもクロスプラットフォームでもなかったからというだけではないかと思う。というのも現在ではXamarinとしてC#iOSAndroidもアプリをつくることができるソリューションが提供されているからだ。

iOSアプリもすこしかじってみたことがあるが、徐々にmacの独特のUIが嫌いになりつつあることを認識してしまっただけでやめてしまった。いや、日本ではiOSのほうがシェアは圧倒的に高いと思うしiOSアプリ開発者を目指すといいんじゃないだろうかとは常々思っている。わたしのようなやつはC#JavaのようなIDEが何から何まで手取り足取り教えてくれるような環境からでないと学習をすすめることができないからというだけだ。

もうひとつ気づいたことは、Android StudioひいてはそのベースとなっているIntelli Jのすごさだ。こいつ、すげーと思う。非常につたない言葉ではあるが、Visual Studioより快適かもしれない。それにEclipseを遥か昔に使っていたことがあるのだけど、比較しないほうがいいな、と思うくらいだ。あれとはまた別の何かで、別の乗り心地の良さがある。

さらに気づきとして、Javaはものすごく進化したのだな、ということだ。Groovyをつかったりしていたけど、Java書けばいいのでは?という気持ちになってくるくらいには進化したんだなということが非常によくわかった。Androidに利用できるJavaは純粋なものではなくてAndroid向けのものではあるが、その時点でも十分なくらいだ。これならC#クロスプラットフォーム化ももっと進めば、さらに楽しくなるのではないかと感じた。

小学生以上がAndroidアプリ開発をするとしたら

もしも息子を含めてAndroidアプリ開発をしたい!と思っているのであれば、書籍を買うのはお勧めしない。英語だけどGoogleが用意している動画を観るのが一番よい。字幕も英語だが、そのなかの単語を調べながらすすめていくと英語の学習にもなるしなぜそのような書きかたをしないと動作しないのかも理解しやすいので、ぜひ辞書を片手に学習していくといいと思う。

何を言っているのか、言葉がわかってもわからない!ということならJavaを先に学習したほうがいいかもしれない。Javaは学ぶことがたくさんある面倒なやつではあるけど、苦手意識を持たずにコミュニケーションしていけば、かなり親切なやつだと気が付くはずだ。また、スマホアプリを使ったことがなければ、なんでもよいので手元で実際に触ってみるのがいいだろう。イメージがわくことが先決だ。使ったことがあれば動画の中で話している内容が「あー、ああいうやつね。はいはい」となるのでぐっと身近になるだろう。

ひとつ懸念としては、実際に書いたものを動かしてみたくなるはずだが、エミュレータを動作させるためにはかなりのメモリが必要になるという点だ。こどもに与えられるコンピュータ、もしかするとScratchが動作すればいいや的なものだとかなり厳しいというか無理だと思う。執筆用のSurface Pro3はメモリが4GBしかないのだが、これでギリギリ動作するラインだ。大学生でスマホアプリ開発を学んで一発当てたい!などと思っているようなら初期投資として8GBを超えるメモリを積んだコンピュータを用意したほうがいいだろう。そうしなければ学習どころではない。そんな金ねぇよ…という方は4GBでコツコツやるしかないだろう。

単純にJavaがどういうものか、書いてみたいだけという方はブラウザ上でコンパイルと実行ができる以下のようなサービスを使うといいだろう。Eclipse やIntelli Jはあまりスペックの高くないコンピュータにはつらいものなので。

Compile and Execute Java Online
https://www.tutorialspoint.com/compile_java_online.php

それでは、ちょっと学習してくる。

Javaプログラマ歴20年な人のためのAndroid開発入門

Javaプログラマ歴20年な人のためのAndroid開発入門

モバイルアプリ開発エキスパート養成読本 (Software Design plus)

モバイルアプリ開発エキスパート養成読本 (Software Design plus)