11月23日の学び

たまにしか使わないのでいつも迷います。。。

リダイレクト

$ ls 存在しないファイル 2> test.txt
$ cat test.txt 
ls: foo: No such file or directory

標準エラー出力のリダイレクト

  • &はファイル記述子の複製を行う
  • &1は標準出力の複製を作成
# 以下のコマンドを実行すると標準エラー出力の出力先はtest.txtとなる
ls 存在しないファイル > test.txt 2>&1

一括リダイレクト

#command &> file
#若しくは
#command >& file
#で以下と同じ効果となる

command > file 2>&1

qiita.com

11月21日の学び(React)

  • Reactを実行した。やはり手を動かさないとわかったという資格はない。
  • 全てコマンドを打つだけで実行できるところに感激した。
  • 「reacのアプリ」と「公開するwebページ」の差分がいまいち見えない。前者は後者の一部にすぎないのでは???

npmをインストール

省略

create-react-appをインストール

$ npm install -g create-react-app

アプリケーションの作成

以下のコマンド実行後3000番にアクセスするとアプリが動いている

$ create-react-app react_test
$ cd react_test
$ npm start

Compiled successfully!

You can now view react_test in the browser.

  Local:            http://localhost:3000/
  On Your Network:  http://10.0.1.3:3000/

Note that the development build is not optimized.
To create a production build, use npm run build.

ディレクトリ構成

ディレクトリ構成も自動で作成される

$ ls
README.md         package-lock.json public
node_modules      package.json      src

パッケージ化

$ npm run build

> react_test@0.1.0 build **********/react_test
> react-scripts build

Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

  34.45 KB  build/static/js/1.2dd891c4.chunk.js
  763 B     build/static/js/runtime~main.229c360f.js
  711 B     build/static/js/main.dfde7675.chunk.js
  512 B     build/static/css/main.3335127e.chunk.css

The project was built assuming it is hosted at the server root.
You can control this with the homepage field in your package.json.
For example, add this to build it for GitHub Pages:

  "homepage" : "http://myname.github.io/myapp",

The build folder is ready to be deployed.
You may serve it with a static server:

  npm install -g serve
  serve -s build

Find out more about deployment here:

  http://bit.ly/CRA-deploy

$ ls
README.md         node_modules      package.json      src
build             package-lock.json public
pidepide-no-MacBook-Air:react_test pide$ ls build/
asset-manifest.json
favicon.ico
index.html
manifest.json
precache-manifest.a902ec76247e158cc6af7751031476f5.js
service-worker.js
static

生成されたbuildディレクトリ内のindex.htmlは人が読める形式ではない。

$ less index.html
<!doctype html><html lang="en"><head><meta charset="utf-8"><link rel="shortcut icon" href="/favicon.ico"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#000000"><link rel="manifest" href="/manifest.json"><title>React App</title><link href="/static/css/main.3335127e.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.leng

React 版の Hello, world! - React 入門

次回予告?

次はこのあたりかも qiita.com

11月21日の学び(AWSインスタンス)

AWSインスタンスの種類

11月18日の学び(React.js)

フロントエンドはそこまで深く踏み込む気はないが動作概要だけでも知っておくこと。

React.jsとは

  • JavaScriptでの開発に用いられるUI用の汎用ライブラリ
  • 比較対象として挙げられるBackbone.jsやAngular.jsとも併用できます。

SPA

  • シングルページアプリケーション
  • 仮想DOMの利用により効率的な画面更新が可能

webpack

  • React.jsやCSSなど複数のソースファイルから配布用のパッケージを作成するツール
  • 以前はgruntやgulpといったツールが利用されていたらしい

React.jsの動作①

  • ブラウザは直接Reactのソースコードを読み込めないため、先にindex.html内のタグを経由してReactの実行ファイルのapp.jsを読み込む
  • 内でReactの適用がなされる

React.jsの動作②

  • ページ状態を保持している「プレーンなJSのオブジェクト」に「テンプレート的な関数」を作用させて、「仮想DOM」と呼ばれるDOMの設計図を取り出す。
  • その設計図を使って本物のDOMを構築する。

ここでいう「プレーンなJSのオブジェクト」とは、JSONをパースしたりするだけで取得でき、タグとかの文字列を一切含まない、クリーンなデータを保持しているJSオブジェクト

React.jsプロジェクトの作成

npmとyarnの2通りの方法がある

npmの場合

  • ブラウザに読み込ませるソースコード用のディレクトリsrcを作成
  • React.jsのソースコードのapp.jsをsrc内に作成
  • webpackが生成するブラウザ動作用のjsファイル出力先としてdistを作成
  • "npm run build"コマンドでwebpackを利用して配布用のパッケージを作成する

11月18日(Node.js)

  • フロントエンドにはそんなに踏み込む気はないが、簡単にでも手を動かす・動かさないで全然異なるため軽くでも触っておく。
  • まぁ確かに画面作るのにわざわざJava + Tomcatとかは面倒。。。

Node.jsの概要

  • JavaScriptで動作するサーバ環境(一般的にはWebサーバ)
  • WebサーバというとApacheIISなどを想定するが、Node.jsはそれらを一切使用しない
  • 代わりに「サーバを作る」ところから実装を始める(わずか数行で簡易Webサーバを作成可能)

もう少し詳しく

シングルスレッド・非同期IOなのが特徴。チャットのようにリアルタイムでどんどん情報が更新されるのには向いているが、CPUリソースを大量に消費するような処理を行うプログラムには向いていない。

ハロワコード

  • node hello_world.jsで実行できる
var http = require('http');
  
var server = http.createServer(function(req, res){
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write('Hello Wrold');
        res.end();
});

server.listen(1234);
console.log('サーバを起動しました。');

11月17日(Maven)

Mavenプロジェクトを作成するとフォルダ構成やconfigファイルなどが自動で作成される。

Mavenとは

以下のように複数の機能を持つJavaのビルドツール。

  • プログラムのビルド:コンパイルからjar/warファイルの作成に関する全ての作業 -プログラムのテストと実行
  • ライブラリの管理:プログラムの動作に必要なライブラリ全てを自動でダウンロード・インストール
  • デプロイ作業:Gitなどを利用してクラウド環境にデプロイすることも可能

Maven関連の単語

ゴール

compile/packageを指定した場合はtargetフォルダ内に作成される

  • compile:javaのクラスファイルの作成
  • test-compile:UT用のテストファイルをコンパイル
  • test:テストを単体で実行
  • package:jar/warファイルの作成
  • clean:不要ファイルの削除

自動化の観点から

  • ソースコードとpom.xmlがあるならば最低限ゴールの指定さえできれば必要なjar/warファイルの作成までは可能。
  • 「デプロイ先」「configファイル」は環境(テスト環境、ステージング環境、コンパイル環境)毎に違うのでそこをどう自動化するか。

11月15日の学び(コメントの書き方)

コメントの書き方

  • ソースコードはロジックのみが記載されている。
  • 「実装の内容」に関して記載するよりは(それは読めばわかる)、「なぜその処理を実装しているのか」という理由を書くこと
  • 「実装の内容」を書く場合は個別のメソッドではなく、メソッド全体の処理概要を記載すること