2017年1月18日水曜日

ARCHITARCHITECTURE OVERVIEW

Angularは、HTMLとJavaScriptまたは、JavaScriptにコンパイルされるTypeScriptを使用して、クライアントアプリを作るフレームワークである。
フレームワークは、コアとオプショナルのライブラリの集まりである。
Angularアプリを作るには、Angularのマークアップで構成されたテンプレートHTMLを作り、テンプレートをマネージするコンポーネントクラス(component classes)、サービス(services)にロジックを追加し、モジュールにコンポーネントとサービスを詰め込む。

ルートモジュールをブート(bootstrapping)しアプリを起動(launch)する。Angularは、コンテンツをブラウザに表示し、作った指示に従い、操作を処理する。

主要な八個のビルドブロックがある。

Modules

Angularアプリは、モジューラー(modular)である。AngularはAngularモジュール(modules)または、NgModulesと呼ばれるモジュールシステムを持っている。
Angularモジュール(modules)は、大物である。ここでは、紹介だけする。
詳しくは、Angularモジュールに書かれている。

小さなアプリではルートモジュールが唯一のモジュールであるが、多くのアプリはいろんな複数の機能(feature)モジュールsから成り立つ。

ルートモジュールも機能(feature)モジュールも@NgModuleデコレーターのついたクラス(class)である。
コレーターは、JavaScript のクラスを一部変更したファンクション(function)である。Angularは、メタデータをくっつけた色々なデコレーターがある。メタデータによりクラスがどのようなものかわかるようになる。でコレーターについてはここで詳しく勉強してください。
NgModuleは一つのメタデータオブジェクトをもつデコレーターファンクションである。
メタデータオブジェクトのプロパティーsによりモジュールを記述する。
重要なプロパティーsは
  • declarations - このモジュール内のビュークラス(view classes). Angular には三種類のビュークラスcomponentsdirectives, とpipesがある
  • exports - declarations のうち他のモジュールsのコンポーネントテンプレートから使用できるもの
  • imports - このモジュールで必要になるクラスのある、他のモジュールでexportsされたモジュール.
  • providers - サービス(services)を作るものの宣言 アプリすべてからアクセスできるサービスを提供する。
  • bootstrap - すべてのビューのホストとなるルートコンポーネントと呼ばれるメインのアプリビュー(the main application view),  ルートモジュールだけがbootstrapプロパティをセットできる。
ルートモジュール(app/app.module.ts)の例
import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
@NgModule({
  imports:      [ BrowserModule ],
  providers:    [ Logger ],
  declarations: [ AppComponent ],
  exports:      [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

AppComponent.のexportは、書き方の例であって、実際には必要ない。他のモジュールがルートモジュールをインポートすることがないため、ルートモジュールが、他のモジュールにexportすることはない。 
ルートモジュールをブートすることによりアプリを実行する。開発中は、下記のmain.tsのように、main.tsからAppModuleをブートする。
app/main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

Angular modules と JavaScript modulesについて

ルートAngularモジュールとJavaScriptモジュールは、全く別ものでで
気をつけてくれ


アプリを作るためには、お互いに異なり、補完する、両方のモジュールシステムを使う。

Angular libraries

Angularは、JavaScriptモジュールの集まりとして出荷されます。JavaScriptモジュールをライブラリーモジュールとみることができる。
Angularライブラリーの名前はプレフィクス@angularで始まる。
Angularライブラリーのインストールは、npmパッケージマネージャーで行い、個々のパートのインポートは、JavaScriptのimportステートメントで行う

たとえば、AngularのComponentデコレーターを@angular/coreライブラリーからインポートするには次のように書く。
import { Component } from '@angular/core';
JavaScriptのimportステートメントを使いAngularライブラリーsからAngularモジュールsをインポートする。
import { BrowserModule } from '@angular/platform-browser';

ルートモジュール(app/app.module.ts)の例で示したように、アプリのモジュールは、BrowserModuleの部品が必要になる。部品にアクセスするには、下記のように@NgModuleのmetadataにインポートする。 
imports:      [ BrowserModule ],

これがAngularとJavaScriptのそれぞれのモジュールシステムを一緒に使う方法である。

どちらもimport,exportという同じ言葉を使うために混乱しやすい。がんばってくれ。時間と経験が混乱を解決してくれる。

Angular modules 詳しくはここ

Components

コンポーネントは、ビューとよばれる画面の一単位をコントロールする。  例えば下記のチュートリアルで作ったビューは、コンポーネントsによりコントロールされる。
  • The app root with the navigation links.
  • The list of heroes.
  • The hero editor.
クラス内にコンポーネントのアプリのロジック(ビューをサポートする)を記述する。クラスは、フロパティーsとメソッドsのAPIを通じてビューと連携する。

下記のように HeroListComponentは サビースから取得したheroesの配列を返すheroes プロパティー を持っている。 HeroListComponent はまた ユーザーがヒーローのリストをクリックした時に、selectedHeroプロパティーをセットするselectHero() メソッド を持っている。

app/hero-list.component.ts (class)


export class HeroListComponent implements OnInit {
  heroes: Hero[];
  selectedHero: Hero;

  constructor(private service: HeroService) { }

  ngOnInit() {
    this.heroes = this.service.getHeroes();
  }

  selectHero(hero: Hero) { this.selectedHero = hero; }
}
Angularは、ユーザーがアプリを移動した時にコンポーネントの作成、更新、廃棄(creates,updates,destroys)を行う 。ngOnInit()のような宣言で、ライフサイクルフックを追加することにより、 create,update,destroyのタイミングに処理を組み込むことができる。

Templates 

コンポーネントの ビューは、 コンポーネントのテンプレイトにより定義される。 テンプレートはHTML形式である。 テンプレートは Angular がコンポーネントを表示する方法をしめす。 テンプレートはいくつかの例外はあるがl通常のHTMLのように見える。 Here is a template for our HeroListComponent:



app/hero-list.component.html


<h2>Hero List</h2>
<p><i>Pick a hero from the list</i></p>
<ul>
  <li *ngFor="let hero of heroes" (click)="selectHero(hero)">
    {{hero.name}}
  </li>
</ul>
<hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>

テンプレートは、 <h2> and <p> のような 通常のHTMLエレメントをつかっているが, *ngFor, {{hero.name}}, (click), [hero],  <hero-detail> のように Angularのテンプレート構文も使っている. テンプレートの最後の行の <hero-detail> タグは、新しいコンポーネント(HeroDetailComponent) のためのカスタムエレメントである。

The HeroDetailComponentは、今見てるthe HeroListComponentとは違うコンポーネントである。HeroDetailComponent (コードは示されていない)は、HeroListComponent で表示されるリストから選択した特定のヒーローを表示する。HeroDetailComponent is はHeroListComponentの子供になる。

<hero-detail> が生のHTMLエレメントのなかに 上手く埋め込まれていることに注意してください。カスタムコンポーネントは、生のHTMLに継ぎ目なく埋め込まれます。

Metadata

メタデータは、Angularにクラスの処理方法を伝える。
HeroListComponent自体は、クラスであり、フレームワークやAngular独自のものではない。Angularにコンポーネントであることを伝えない限り、HeroListComponentは、ただのクラスである。
メタデータを取り付ける事によりHeroListComponentがコンポーネントであることをAngularに伝える。
TypeScriptでは、デコレーターを使いメタデータを取り付ける。

app/hero-list.component.ts(metadata)


@Component({
  moduleId: module.id,
  selector:    'hero-list',
  templateUrl: 'hero-list.component.html',
  providers:  [ HeroService ]
})
export class HeroListComponent implements OnInit {
/* . . . */
}
@Componentデコレーターが直下のクラスがコンポーネントクラスであることを示している。

Laravel 5.3

Laravelはディレクトリ構成がちょっとわかりづらい
mvcの場所
model
       app/
view
       resouces/views/
    .blade.phpという拡張子をつける
controller
       app/Http/Controllers/


cakePHP
model
       src/Model
view
       src/View
controller
       src/Controller

2017年1月14日土曜日

bitnamiのmapp(WAPP,LAPP)でLaravelのインストール

bitnamiからMAPP(WAPP,LAPP)をダウンロードしインストーラの指示に従えはインストール完了
Linuxの場合は、インストーラーをchmod +x する必要があるかもしれない。
途中でインストールするコンポーネントを選択する画面が出るので最低LaravelとPhpPgAdminは選んでおく。
あとインストール場所とpostgresqlのパスワードとクラウドにインストールするか聞いてくる。クラウドはチェックを外しておく。
インストール終了時に起動するにチェックしたままで終了するとマネージャーとwebが立ち上がる。
マネージャーの画面

マネージャーからは、サーバーの起動停止ができる。
インストールディレクトリ/apache2/conf/bitnami/bitnami-apps-prefix.conf
をエディターで開き
#Include "/Applications/mappstack-7.1.0-1/frameworks/laravel/conf/httpd-prefix.conf"
の行の先頭の#(コメント)を削除して保存する。
マネージャーからapatcheを再起動する。

http://127.0.0.1:8080/laravel
をアクセスすると
Laravelが表示される。

Laravelはインストールディレクトリ/frameworksにある。

なお MAPP(WAPP,LAPP)には
use_mappstack(use_wappstack,use_lappstack)というシェル(bat)ファイルかついてきいる。これを起動すると、いっいょにインストールされた、php,composer,gitのコマンドライン実行やコマンドラインによるサーバーの起動停止ができる。

httpd-app.confの修正
AllowOverride None --> AllowOverride All

2016年12月24日土曜日

ANGULAR TUTORIAL: TOUR OF HEROES

The Tour of Heroes tutorial はTypeScriptでAngularアプリを作る

このチュートリアルの大きなプランは、人材派遣会社のヒーローたちの管理を手伝うアプリを作ることである。ヒーローたちは仕事を探している。

このチュートリアルでの進歩は、少しだけかもしれない。しかし、full-blown, data-driven アプリの多くの機能を発見できる: ヒーローのリストの取得と表示 、ヒーローの選択と詳細の編集、ヒーローの表示 ナビゲーションなど

このページは、The Tour of Heroesでどんなものを作るかの説明で特に訳すことはない。

ライブ環境はここ live example.


画面繊維等の説明 省略

実際につくってみる

Next Step

次の章はここ ==> ここ
原文はここ ==> The Hero Editor


THE HERO EDITOR

THE HERO EDITOR

ローカルの開発環境を作る

set upに書かれている方法でセットアップする。
プロジェクト名(フォルダー名)をangular-tour-of-heroesにする


git clone https://github.com/angular/quickstart.git angular-tour-of-heroes
cd angular-tour-of-heroes
npm install

この章では、live example. をつくる。

まず 
npm start
を実行する
このコマンドによりTypescriptコンパイラがワッチモードで起動し、サーバーとブラウザが起動する。コンパイラは、ソースコードの修正をつねに監視し、変更があれは、すぐにブラウザに反映させる。

ここから改造していく
AppComponentに二つのプロパティsをもたせる。二つのプロパティsとは   a title プロバティ(アプリケーションの名前) とa hero プロパティ( ヒーローの名前 "Windstorm")

app.component.ts (AppComponent class)

export class AppComponent {
  title = 'Tour of Heroes';
  hero = 'Windstorm';
}
@Componentのthe テンプレートのバインディング(binding)を新しいプロパティに合わせて変更する。
template: '<h1>{{title}}</h1><h2>{{hero}} details!</h2>'
ブラウザでタイトルとヒーローが変わっているのが確認できる。
二重の中カッコ"{{  }}"は、componentからtitleとheroを読み込みアプリに渡すことを指事する。二重の中カッコ"{{  }}"は、一方向バインディング の補完(interpolation)形式である。

注  補完(interpolation)について詳しくは、 Displaying Data chapter.をみよ


Hero object
ヒーローに名前以外にもっとプロパティをもたせたい。そこで、heroプロパティを文字列(literal string)からクラス(class)に変える。

idとnameのプロパティを持ったHero classを作る。
app.component.tsファイルの先頭のimportステートメントの下に入れる。

app.component.ts (Hero class)

export class Hero {
  id: number;
  name: string;
}
heroプロパティのタイプをHeroに変更する。

app.component.ts (hero property)

hero: Hero = {
  id: 1,
  name: 'Windstorm'
};
テンプレートのバインディングも修正する。( {{hero}} ==> {{hero.name}} )

template: '<h1>{{title}}</h1><h2>{{hero.name}} details!</h2>'

HTMLにいろいろ追加する

ES2015(ECMASCript2015)と TypeScriptのマルチライン・ストリングを使ってテンプレートを書き換える。

app.component.ts (AppComponent's template)


template:`
  <h1>{{title}}</h1>
  <h2>{{hero.name}} details!</h2>
  <div><label>id: </label>{{hero.id}}</div>
  <div><label>name: </label>{{hero.name}}</div>
  `

ヒーローの編集

nameの <label>を<label>  <input>に変える。下記のようになる

app.component.ts (input element)


  1. template:`
  2. <h1>{{title}}</h1>
  3. <h2>{{hero.name}} details!</h2>
  4. <div><label>id: </label>{{hero.id}}</div>
  5. <div>
  6. <label>name: </label>
  7. <input value="{{hero.name}}" placeholder="name">
  8. </div>
  9. `
ヒーローの名前が入力できるようになったが、入力しても<h2>に表示される名前は変わらない。一方向バインディングでは、それはできない。

二方向バインディング(Two-Way Binding)


まずは、the FormsModule パッケージをアンギュラー モジュールへインポートする。
それをthe NgModule のデコレーターの(decorator's) imports配列に追加する。This この配列は、アプリで使用する外部モジュールsのリストを持つ。 これでngModelを持つformsパッケージの準備ができた。

app.module.ts (FormsModule import)


  1. import { NgModule } from '@angular/core';
  2. import { BrowserModule } from '@angular/platform-browser';
  3. import { FormsModule } from '@angular/forms';
  4. import { AppComponent } from './app.component';
  5. @NgModule({
  6. imports: [
  7. BrowserModule,
  8. FormsModule
  9. ],
  10. declarations: [
  11. AppComponent
  12. ],
  13. bootstrap: [ AppComponent ]
  14. })
  15. export class AppModule { }
the FormsModule と ngModel については、 Forms または Template Syntax で詳しく書いてます。
二方向バインディングのために ngModel 組み込み命令を用い テンプレートの修正をおこなう。

 <input>を書を下記のHTMLで置き換える。
<input [(ngModel)]="hero.name" placeholder="name">
ブラウザがリフレッシュされ、inputに入力するとただちに <h2> のヒーロー名が変わるのが確認できる。

この章のまとめ
ライブ例題は、ここ ==>  live example 
これから、さらに改造していく。
これからの章は ここ ==>Master/Detail

2016年12月13日火曜日

[ANGULAR] SETUP FOR LOCAL DEVELOPMENT

https://angular.io/docs/ts/latest/guide/setup.html

ローカル開発のためのセットアップ

早くて効率的な開発のために
the Angular QuickStart seed
をインストールする。


ローカル開発環境へのセットアップ


The QuickStart live-coding 例題は、 an Angular playground.です。それは本物の アプリを開発する場所ではない。自分自身のマシン上で開発するべきである。 

 the QuickStart seed を使うとあなたのマシン上に、早く簡単に新しいプロジェクトのセットアップができる。
(the QuickStart seed は、github でメンテナンスされている。)

nodeとnpmがインストールされてるか確認しろ。

1.プロジェクトフォルダーを作る。名前はとりあえずquickstartにする。(あとで変更できる。)
2.プロジェクトフォルダーにthe QuickStart seed をclone(gitのcloneコマンド)またはダウンロードする。
3.npmでパッケージsをインストールする
4.サンプルアプリを実行するためにnpm startを実行する


cloneの場合
下記のコマンドを実行する

git clone https://github.com/angular/quickstart.git quickstart
cd quickstart
npm install
npm start
(http://localhost:3000/確認できる)

ダウンロードの場合 省略

the QuickStart seedの中身は?

the QuickStart seedは、the QuickStart Playgroundと同じアプリを含んでいる。
ほかにもいろいろなファイルがプロジェクトフォルダー内にある。
それらは、後でlearn about later.

/appFocusフォルダー内の三つのタイプスクリプト(.ts) ファイルに注目する
app
app.component.ts
app.module.ts
main.ts
全てのガイドやクックブックは、これらの三つのコアファイルsを必ず持っている。
それぞれのファイルは、個別の目的がある。アプリの成長に合わせて個別に拡張されていく。
FilePurpose
app.component.ts
the QuickStart playgroundにあるのと同じAppComponentの定義。 rootcomponent 拡張されるすべてのアプリの木構造の根元になる。
app.module.ts
ルートモジュールとなるAppModuleの定義。Angularにアプリケーションの組み立て方を指示する。インストール直後は、 the AppComponentだけを宣言している。そのうちにに多くの components を宣言するだろう。
main.ts
main.tsは、JiT(Just in Time) compiler でアプリをコンパイルし、プラウザで動作するようにアプリをbootstraps する. ほとんどのプロジェクトでmain.tsが適切な選択であり、Plunkerのようなライブコーディング 環境では、これしか選べない。別のコンパイルとデプロイ方法は、後ほど、このドギュメントで 紹介する。
次の一歩 
 Angular初心者ならこのまま learning pathを進むことを勧める
付録 node と npm
Angularや他のプラットフォームでのweb開発にとって、nodeとnpmは、必須だ。nodeは、クライアント開発やツールの作成ができる。nodeのアプリであるthe npmパッケージマネージャーは、javascriptのライブラリをインストールする。
Get them now マシンに入ってないならすぐに手に入れろ

バージョンを確認しろ node はv4.x.x かそれ以上 npm は、3.x.x かそれ以上
コマンドをターミナル/コンソール ウインドーから入力しろ。node -v  と npm -v 古いバージョンはエラーを起こす。

いろんなバージョンのnode,npmを使う場合は、nvmを使うことをすすめる。
(個人的には、virtualboxやbitnamiのmeanやrubyなどを使うことを勧める。とくにbitnamiのスタックは、git,Devkitなんかも一緒にインストールしてくれるし、マシンの環境をほとんど汚さない)

付録 なぜローカルで開発するのか
ブラウザからLive codingを使いAngularを探検するのは素晴らしい。

ほとんどのドキュメントが完全なサンプルにリンクしているてブラウザー上で使える。theサンプルコードを動作させて、修正を友人と共有し、ダウンロードすることができる。

The QuickStartは、the AppComponentファイルだけを表示している。読者に余計な気を使わさないためにapp.module.ts と main.tsは、同じようなものが内部的に作られている。ほかのサンプルもthe QuickStartに基づいている。

  • plunkerではアプリを公開できない
  • オンラインでないとコーディングできない
  • ブラウザー上でのTypeScriptのコンパイルは遅い
  • ローカルのIDEみたいにコード補完やリファクタリンクがてきない。
 the live codingは遊び場、ドキュメントサンプルを動かし実験することに使ってくれ。file a documentation issue やfile an issue with Angular itselfするときに、バグを再現 させる場所としては完璧。
本物の開発はローカル環境で行ってくれ。