AngularJS入門者必見!作りながら覚えて10分で理解

AngularJSとは、Google社主導で開発されているJavaScriptのフレームワークのことです。大規模なアプリケーションでも安定した、綺麗なコードで書きやすい仕組みが用意されていることが特徴です。

今回は、AngularJSとはなんなのか?どういう特徴があるのか?から、実際にアプリケーションを作りながら、覚えられる実践講座までご用意いたしました。

AngularJSの簡易的な入門書のようにお使いいただければと思います。

 

AngularJSとAngular2

2010年頃に初版がリリースされていて、執筆時点では1.5.7版がリリースされています。

AngularJSには、バージョンが2迄存在しており、最近ではAngular2の話題がホットですが、実は、バージョン1.x系と2.x系の互換性はありません(この先もきっとありません)。

今回は、バージョン1.x系にあたる、AngularJSについて作成する際に必要な準備、そして開発手順と言った、入門者がまずやった方がいいポイントをまとめさせていただきました。

※以下、AngularJSと記述した場合は1.x系。Angular2と記述した場合は2.xとする

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

なぜ今更AngularJS?

Angular2ももうすぐ正式リリース(執筆時点ではまだrc4)するし、AngularJSとの互換も無いならなぜ今更AngularJSを学ぶ必要が?と思われる方も少なく無いと思います。

その理由は、実績の多さと活用のしやすさです。

確かにAngularJSとAngular2には互換性はありませんが、根底の概念は大きくは変わりません。そして、Angular2はまだまだ若いです。より良いフレームワークになっていく為にこれからも仕様が変わっていく可能性は大いにあり得ます。

一方で、AngularJSは6年もの間、既に様々なWebサイトやシステムを支えてきており、実績が十分にあります。また、AngularJSに関する情報もインターネット上にたくさんあるので、問題に直面した場合も解決策を見つけやすく、使いやすいため、Angular2が正式リリースした後も、しばらくはAngularJSが使われるだろうと思われます。

 

まずは実践!AngularJS

まずは、AngularJSを触ってみましょう。以下の機能を持った簡単なアプリケーションを作ります。

Twitterのユーザーリストを追加して、アクセスできるアプリケーション

<機能一覧>

* フォームでtwitterのユーザー名入力機能

* 登録したtwitterユーザーの一覧表示機能

* ユーザー一覧から各twitteアカウントページへのアクセス機能

 

AngularJSの準備

公式サイト(https://code.angularjs.org/)にてJavaScriptが公開されているので、最新版を参照します。

(ついでに生のHTMLでは見た目が素っ気ないのでBootstrapを参照しています。Bootstrapについては詳しく説明はしませんが、簡単に見た目の整った画面が作れる便利な道具だと思ってください)

HTML

 

アプリケーションの準備

AngularJSのJavaScriptと画面であるHTMLを繋げるためには必ずおまじないが必要です。まずはAngularJSのアプリケーションをJavaScriptで作りましょう。以下の内容を含んだ app.js を準備します。

JS

 

上で作った myApp というアプリケーション(正確にはモジュール)とHTMLを紐付ける必要があります。

そこで登場するのが ng-app です。細かい説明はここで一気に覚えるのは難しいので省きますが、AngularJSにはJavaScriptとHTMLを紐付ける為の便利な合言葉に ng-* というものがいくつも用意されていると思ってください。 ng-app に関しては以下のように記述することで、このタグ(今回の場合 <html> タグ)の配下は myApp が管理しますよ、と宣言していると思ってください。また、上で作った app.js も含めておきましょう。

HTML

 

ここまででいったんの準備は完了です。この準備はどのAngularJSのアプリケーションを作るときでも必要だと思っておいてください。

 

 画面を作成

それではAngularJSを書いていきましょう、と言いたいところですがまずは今回の画面の大枠をHTMLとBootstrapで先に作ってしまいましょう。HTMLを以下のようにします。あまり細かいことは気にしなくていいですが、大きくは「ユーザー登録フォーム」と、登録したユーザーを表示する「ユーザー一覧」があることを覚えておいてください。

HTML

 

Controllerの作成

ようやくAngularJSらしいJavaScriptを書きます。その名も controller です。 controller は画面からのアクションに反応したり、画面に情報を表示できるようにしてくれるキーとなる存在です(正確には $scope という存在と組み合わさって実現されます)。

画面に必要な機能としては以下が考えられます。

* フォームのINPUTに入力されたユーザーを登録

* 登録されたユーザーをユーザー一覧に保存

これを実現するためにJavaScriptの観点で必要なものは下のようになるかと思います。

* 入力されたユーザー名を保持しておける変数 → username

* 登録ボタンが押されたときの登録処理(関数) → submit

* 登録したユーザーを複数保存しておける配列 → users

これらを踏まえて controller を書いてみましょう。まずは app.js を編集します。

JS

 

controller の追加方法は、 angular.module にぶら下げる形で、 .controller(<コントローラー名>, <コントローラーの実装>) という形で登録します。これは AngularJSのルールなので覚えておくしかないです。

JavaScriptがわかる人であればなんとなく上のコードが何をしているか分かるかと思います。ただし、謎の $scope という存在がいると思います。

$scopeについて深く説明すると文面が多くなってしまうのですが、いったんはHTMLとJavaScriptを紐付けてくれる人だと思ってください。ざっくりとした説明ですが $scope に入れたものはHTMLで使える、と思ってもらっていったんは大丈夫です。

そして、 function の引数として function($scope) と書くことで、AngularJSが 魔法のように $scope を使えるようにしてくれます。(これをDependency Injectionと言うのですが、細かい説明をここでは省略します)

 

ControllerとHTMLの紐付け

それでは、Controllerの内容をHTMLと紐付けます。ここでも ng-app のときのように合言葉を使います。

ng-controller

まずはControllerが使える範囲を決めるために、 ng-controller を使います。これを使ったタグの配下はそのController(今回であればAppController)と紐付きます。とりあえずはみんなを包み込んでくれている <div> に先ほど作った AppController を紐付けましょう。

 

これで <div> 配下で AppController$scope に入れたものを使えるようになります!何を $scope に入れたか思い出してみましょう。

* username → 登録するユーザー用

* submit → ユーザー登録用の関数

* users → 登録したユーザー一覧用

 

ng-modelでINPUTと紐付け

INPUTで入力した内容を、登録するユーザー名として使いたいですよね。さらにこれが自動的にINPUTと連動してくれたら楽ですよね!そんなときに使えるのが ng-model です。下のように書くことで、 $scope の中の username とINPUTを紐付けることができます。

 

ng-submitで関数と紐付け

これでINPUTの紐付けは完了しましたが、紐付けしただけでは登録はできませんね!登録ボタンを押したら submit が実行されるようにしたいです。ここでは <form> を使っているので、 ng-submit を使うことができます。それでは <form>submit を紐付けましょう!

HTML

 

こうすることで登録ボタンを押したときに $scopesubmit が実行されるようになります。これだけ簡単に書くことができるのです。

 

ng-repeatで配列を紐付け

ここまでで何かしら紐付けはしているのですが、本当に動いているかどうかよくわからないですね。登録したユーザー一覧を画面で見ることができたら、今までの処理が動いているかどうかわかるはずです。ユーザー一覧を表示したいのですが、一覧というものは同じような部品を **繰り返し** 表示しますよね。配列に入っているものを繰り返し簡単に表示したいです。

そこで登場するのがAngularJSの中でも最も使う頻度の高い ng-repeat です。とにかくどうやって書くか見てみましょう!

HTML

 

<li> を繰り返し表示したいので <li>ng-repeat を書いています。 ng-repeat="user in users" と書くことで users に入っている一個一個の要素を user として取り出して ng-repeat の付いているタグ内で使うことができます!さて、ここでまた新たな記述方法が登場しています。

HTML

 

なにやら {{}} で囲まれたものがあります。これは **インターポレーション** と呼ばれるもので、単語は難しく聞こえるんですけど結局は {{}} の中のオブジェクトや式をAngularJSが変換して画面に出してくれる便利な仕組みのことです。上の書き方をしたことで user の持っている username が表示され、 <a> のリンク先は user に設定した url が使われることになります。

これでユーザー一覧が完成しました!

 

完成!

最終的には以下のようにHTMLとJavaScriptが作られているはずです!実行してみてちゃんと動くかみてみましょう!

HTML

JS

 

改善してみよう

簡単なアプリケーションを作ってみましたが、使いづらい点がいくつかあることにすぐに気づくと思います。例えば以下のような点です。

* INPUTが空白でも登録できてしまう(空白なら登録しないようにしたい)

* ユーザー登録をしたのにINPUTがそのまま表示されている(登録後はINPUTを空にしておきたい)

* ユーザーが一人も登録されていないときの表示が不親切(一覧も表示されないので「ユーザーが登録されていない」などのメッセージが表示されるとより良い)

* 登録したユーザーを一覧から削除できない(間違えて登録してしまった場合に削除する手段がない)

 

などなどです。ぜひ、これらの機能を自分で追加してみましょう。一つの例として以下のソースを載せておきますので参考にしてみてください。

https://embed.plnkr.co/6sRCfZ00PB7nctL4W7OG/

 

便利なAngularJS 活用する際の注意点

いかがでしたでしょうか?ほとんどコードを書かずにHTMLとJavaScriptを連携させることができたと思います。これがAngularJSの強みです。ただし、同時にこれがAngularJSの弱み(?)とも言えます。この限られた紙面で様々な機能を説明することができずに省略してしまっていますが、様々な難しそうな用語(Dependency Injection、インターポレーションなど)が出てきますし、色々とAngularJSが自動で魔法のようにやっていることもたくさんあります。

この記事内で全く触れていませんが、AngularJSには再利用可能な部品を作っていくためのDirectiveとComponentというとても重要な仕組みもあります。このように、覚えておくと良い概念も少なくありません。訳の分からないまま使っているとどうしても不安な気持ちが広がってしまうと思います。

が、フレームワークを使うにあたってそのフレームワークのルールを覚えるというのはある程度仕方の無いものです。ただし、そのルールを覚えることでより早く、より良い物を作りやすくなるのであれば、覚えることに意味があるのだと思います。AngularJSにはそれを覚えるだけの価値が十分にあります。そして、AngularJSが使えるようになった先にはAngular2にもシフトしやすくなるという明るいであろう未来もきっと待っています。今日からどんどんAngularJSを使っていきましょう!