Viewing entries in
Javascript

webpack + Angular

webpack + Angular

みなさん、こんにちは。KEYチームの矢納です。
過去記事の目次はこちらに移動しました。

今回はwebpackを使った記事を書いていこうと思います。Angularは1系です。

webpackとは何か?

さて、いきなりwebpackと言われても何もわかりません。

webpack takes modules with dependencies and generates static assets representing those modules.

公式ドキュメントによると上記のことだそうです。依存解決ツールでもあり、複数のファイルをまとめてくれるものです。

実践

とりあえず、手を動かしていきましょう。

1.初期準備

$ mkdir ~/sample
$ cd ~/sample
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (sample) [何も入力せずにEnter]
version: (1.0.0) [何も入力せずにEnter]
description: [何も入力せずにEnter]
entry point: (index.js) [何も入力せずにEnter]
test command: [何も入力せずにEnter]
git repository: [何も入力せずにEnter]
keywords: [何も入力せずにEnter]
author: [何も入力せずにEnter]
license: (ISC) [何も入力せずにEnter]
About to write to /Users/yanu/sample/package.json:

{
  "name": "sample",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) [何も入力せずにEnter]

npm init 後の質問は基本的には何も入力せずにEnterで大丈夫だと思います。

2.webpackやAngular等のインストール

$ npm install webpack webpack-dev-server stubby --global
$ npm install angular angular-route bootstrap --save-dev

stubbyはMockServerです。

3.loaderのインストール

webpackは様々なlodaerを使って依存を解決します。

$ npm install css-loader file-loader html-loader style-loader url-loader --save-dev

loaderはたくさん用意されていますので、ドキュメントを参照して下さい。

4.アプリ作成

Githubに用意しましたので、こちらを利用して下さい。

5.webpack.config.js

このファイルにentryやoutput先、loaderの設定等を書きます。

6.package.json

このファイルのscriptsオブジェクトに色々と追加します。

  "scripts": {
    "dev": "webpack-dev-server --colors --inline",
    "stub": "stubby -d server/server.yaml",
    "serve:windows": "start npm run stub && npm run dev",
    "serve:mac": "npm run stub & npm run dev",
    "build": "rm -f app/bundle.js && webpack --colors",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

7.実行

$ npm run serve:mac

ブラウザで http://localhost:8000/app/ にアクセスすれば、画面が表示されると思います。Bootstrapや独自で作成したcssファイルは app.js で読み込んでいます。

8.ビルド

$ npm run build

実行後、 app 配下に bundle.js が作成されています。このファイルにhtml, javascript、css、imageはBASE64に変換されて書き込まれています。html, css に関しては webpack.config.js で minimizeを設定してありますので、圧縮されます。
作成された bundle.js と index.html をサーバに配置すれば完了です。

おわりに

webpackを使って複数あるファイルを一つにすることができました。grunt や gulp 等を代わりになるのではないでしょうか。

今回、javascript の minify ができませんでした。webpack は UglifyJsPluginというのを用意しているのですが、変数名を変えてしまうので、anguler が依存解決に失敗してしまいます。だれかご存知でしたら、ご教示ください。

Email: yanou at atware.co.jp

AngularJS+GoogleMapに挑戦したら予想以上にはまった話

AngularJS+GoogleMapに挑戦したら予想以上にはまった話

皆さんこんにちは。KEYチームの武永です。

現在GoogleMapを使ったWebアプリを作っています。
ほぼ初挑戦となるAngularJSを使っています。
予想では2時間程でできるかなと思っていたのですが、
かなりはまったので今後同じことにならないよう自分のためにも記録しておこうと思います。

その際使用していたのが「angular-google-maps」です。
こちらを使用した日本語の記事がいくつかあったのでそちらを参考にしていたのですが、上手くいかず
サンプルコードをそのままコピー下にもかかわらず動きませんでした(汗)

原因としては「angular-google-maps」のバージョンアップに伴い使い方が一部変化しており、
私が参考にした日本語の記事のものでは動かなかったということでした。

では、はまった部分も含めて実際のコードを見ていきましょう。
今回作成したものはGoogleMapを表示してマップ上に複数のマーカーを表示するというものです。

「angular-google-maps」のインストール

以下コマンドを実行

bower install angular-google-maps --save

scriptタグを追加 bower install を実行後は「angular-google-maps.js」が追加されています。 それよりも前に以下のタグを追加します。

<script src="//maps.googleapis.com/maps/api/js?sensor=false"></script>

app.jsの作成

map.jsの作成

map.htmlの作成

CSSの設定

実はこれに一番悩みました。
これを行わないとGoogleMapは表示されないのですが、
私は指定しなくても適当なサイズで表示されるものだと勝手に思い込んでいました。
1時間弱悩んでまさかと思い、追加してみて表示された時は本当にムダな時間を使ったと感じてしまいました。
解決した後に公式をもう一度見直すと

Specify an height via CSS for the map container

としっかり書かれてました。見落としてました。。。

実際に動かしてみたものがこちらになります。

表示させてみると非常に単純なものなのに予想以上に時間がかかりました。

最後に

色々悩みましたが目的としていた部分までほぼ知識がない状態で辿りつけたので動作した時には嬉しかったですね。
同じようなはまり方をしている人の少しでも参考になれば幸いです。
今回使用したAngularJSは1系で2系では書き方が大幅に変わるらしいのでそちらも勉強していきたいです。

Try to React Native for Android

Try to React Native for Android

Hello everyone. I'm Masahiro Yanou of KEY Team.
Technology Post No7!!「Try to React Native for Android」.

Past Post List is here.

React Native published on GitHub as open source by Facebook. This blog introduce the React Native for Android Sample.
Attention Today(2015/09/24), React Native supported only OSX.

Preparation

Install JDK

Java Download Site

Install Homebrew

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Install Android SDK

$ brew install android-sdk

Add ANDROIDHOME to .bashprofile

ex) $ export ANDROID_HOME=/usr/local/opt/android-sdk

Download Android SDK

$ android

Start Emulator

$ android avd

After create, click Sart...

Install node(nodebrew)

$ curl -L git.io/nodebrew | perl - setup
$ nodebrew install-binary latest
$ nodebrew use latest

Install watchman and flow

$ brew install watchman
$ brew install flow

Quick Start

$ npm install -g react-native-cli
$ react-native init AwesomeProject
$ cd AwesomeProject/
$ react-native run-android
※In this time, run Server to load a JavaScript from device.
If don't run server, output as follows:
[warn] JS server not recognized, continuing with build...
※In this time, if device don't exist, happen error.
$ $ANDROID_HOME/platform-tools/adb shell am start -n com.raproject/.MainActivity
Starting: Intent { cmp=com.raproject/.MainActivity }

After run command, start application.

Add Button

Before this section, sample only. so, I try to add button.

$ npm install react-native-button --save

When create button, you need to another module. I was very surprised.

In this time, when click button, output current time. When output current time, I used moment.

$ npm install moment --save

HTTP Connection

One more thing.

When development android with Java, you should write http code as background.
But in this time, you don't care it. It's too easy.

I used ajax Library SuperAgent.

$ npm install superagent  --save

LAST

If you think react is very easy, you try React Native for Android .
See you next time.

Email: yanou at atware.co.jp

Javascriptの勉強方法

Javascriptの勉強方法

javascriptを勉強したい、身につけたいと思って何から始めたらいいかわからない方へご参考程度に私がやってきたことをお伝えしたいと思います。

イントロダクション

いきなり英語かよ。と、面を食らってしまいました。でも、まずは知ることから始まるのでココをみておくことが大事です。Google先生に翻訳してもらってもだいたいわかります。

参考になるソースを書いてみる

いままでで一番参考になったのは underscorebackboneです。 きれいな書き方に見えるし、コメントもいいですね。一番好きです。 写経して勉強しました。

デザインパターン

javascriptのソースを見る上でもデザインパターンを知っておくほうがいいですね。ここも英語ですが読んでおくといいですね。

styleガイド

badとgoodが記述されていてとてもわかり易いです。内容も充実しているのでかなり勉強になります。

その他もろもろ

フレームワークとかテストとかjavascript周りの正しい方向を示してくれています。いろいろな環境を知ることが出来て勉強になります。

何か一つフレームワークを使いこなせるようになる

現在の代表的なフレームワークとしてはいろいろあります。

上記3つの中でどれでもいいので一つ使いこなせるようになっておくことが大事です。

プログラミング言語を覚えるのはとても難しいですし、時間が必要ですが、根気よく勉強を続けることで使えるようになってきます。

javascriptのimmutableデータを感じてみよう

javascriptのimmutableデータを感じてみよう

こんにちは、KEYチームの荒木です。本日はjavascriptのimmutableについてです。

今話題としては(もう古いかもしれませんが)immutableですか? javascriptはobject型をのぞく全ての型は不変 (immutable) な値として定義されていますが、不変な値とそうでない値ではどのような違いがあるのかをみてみましょう!

imuutableなデータを扱う

mutableなデータを扱う

ソースの実行結果は

mutableなデータを取得してみると53.768ms

immutableなデータを取得してみると(一度作りなおす必要はありますが)0.221ms

とても早いですね。

簡単に扱うimmutable.jsもありますので是非使ってみてください。

参考1: https://developer.mozilla.org/ja/docs/Web/JavaScript/Data_structures

参考2:https://www.youtube.com/watch?v=I7IdS-PbEgI