中安拓也のブログ

プログラミングについて書くブログ

少し変わった(?)配列の参照方法

return ['pig', 'fox', 'bird', 'fish', 'mouse'][3]; // fish

上記の文を見たとき一瞬意味がわからなかったんですが、単純に定義した配列に添字の3を指定して値を呼び出しているだけですね。 かっこいい書き方だと思ったので、今後自分のコードにも積極的に使っていく所存です。

// m以上n以下のランダムな数値を返す
function getRandom(m, n) {
    return m + Math.floor((n - m + 1) * Math.random());
}

// いずれかの動物を表す文字列をランダムに返す
function getRandomAnimal() {
    return ['pig', 'fox', 'bird', 'fish', 'mouse'][getRandom(0, 4)];
}

console.log(getRandomAnimal()); // ex. pig

ブラウザの開発者ツールによるAndroid/iOSアプリのデバッグ方法

はじめに

ブラウザの開発者ツールによるAndroid/iOSモバイルアプリのデバッグ方法について書きます。

開発環境

  • ブラウザ: Google Chrome (バージョン 60.0.3)、Safari (バージョン 9.1.3)
  • OS: OS X EI Capitan (バージョン 10.11.6)

Android

  1. デバッグしたいアプリを起動した状態でAndroid端末をPCに接続
  2. Chromeの開発者ツールを開く
  3. 開発者ツールのメニューから[More tools] -> [Remote devices]を選択

f:id:l08084:20170902231132p:plain

4.Remote devicesタブから、デバッグしたいアプリを選択

f:id:l08084:20170902231652p:plain

f:id:l08084:20170902231706p:plain

iOS

  1. デバッグしたいアプリを起動した状態でiOS端末をPCに接続
  2. Safariのメニューから[開発] を選択
  3. デバッグ対象のアプリを選択する(下のキャプチャーでは、アプリを起動していないので何も表示されない)

f:id:l08084:20170902233226p:plain

デバッグができない場合

モバイル端末をPCに接続したのに、デバッグ対象のアプリが認識されない!みたいな事が起きた場合は、下記のケースを疑ってみてください。

  • モバイル端末側の設定ができていない。例えばiPhoneだと、[設定] -> [Safari] -> [詳細] -> [Webインスペクタ]まだ進んで設定をONにする必要がある

  • モバイルアプリでも、パッケージング(アーカイブ)されたものについては、デバッグができない。iOSのケースでいうと、In Houseビルドされたものについては、端末を繋いでもアプリが認識されない

  • Safariの開発メニューがそもそも表示されない

    • 事前にSafariの設定が必要

なんて検索していいかわからなかったJavaScriptの記法メモ

はじめに

JavaScriptのコードを見ていて、この書き方どういう意味かわからないけど、なんてキーワードで検索していいかわからない...みたいなことがあったので、検索しづらいと思ったイディオムをまとめた。

検索に困った文法

ショートサーキット

a || baが真であれば、bの評価がスキップされるという特性があるため、下記の例のような簡略化した値の代入を実施できる。

let fuga;
let hoge = fuga || 45; // ショートサーキット。fugaがfalseであれば、45が代入される
console.log(hoge); // fugaがundefinedなので45が表示される
fuga = 5;
hoge = fuga || 45; // ショートサーキット。fugaがfalseであれば、45が代入される
console.log(hoge); // fugaに値が代入されていたため、今度は5が表示される

スプレッド構文

スプレッド構文を使うと、1つの配列を複数に展開することができるため、ループを使用せずに、ある配列を他の配列に含めるといった処理が可能になる。

let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
arr2.push(...arr1); // スプレッド構文。配列arr1の全要素を配列arr2の末尾に追加する
console.log(arr2); // [ 4, 5, 6, 1, 2, 3 ]と出力される

Angular + Typescriptをブラウザでデバッグしたい

はじめに

Angularプロジェクトをブラウザでデバッグする際に、TypescriptファイルにBreakPointを設定する方法がわからなかったので調べた。

環境

  • Angular: 2.4.7
  • angular-cli: 1.0.0-beta.28.3
  • webpack: 2.2.0
  • Google Chrome: 53.0.2785.116
  • 各種設定ファイルは、Angular CLIでプロジェクト作成後、デフォルト設定のまま
  • エディタはVisual Studio Code(1.7.2)を使用

デバッグ方法

  1. Angular CLIで雛形プロジェクトを作成した後、ng serveコマンドで開発ビルド&実行する
  2. Chromeのdeveloper toolsを起動する
  3. Sourcesタブを選択 f:id:l08084:20170213222308p:plain

webpack://配下にTypescriptファイルが配置されているのでBreakPointを設定することができる。

画像の例では、src/app/app.component.ts ファイルにBreakPointを設定している。

なぜ私のAngular CLIはカレントディレクトリにプロジェクトを作成してくれないのか?

Angularプロジェクトの雛形作成に、generator-angular2-typescriptを使っていたのですが、最近Angular CLIに移行しました。

表題の件

Angular CLIでは、ng new [プロジェクト名]コマンドでプロジェクトの雛形をカレントディレクトリに作成してくれるんですが、なぜかカレントディレクトリではなくホームディレクトリにしかプロジェクトを作成してくれない!という事態が発生しました。

開発環境

  • OS:OS X EI Capitan(10.11.6)
  • angular-cli: 1.0.0-beta.28.3
  • node: 6.2.1

解決

ググって出てきた下記stackoverflowの記事のおかげで解決しました。

stackoverflow.com

Do you have a package.json file in your home/user directory? I experienced this issue, then I removed package.json and that stopped it.

ホームディレクトリに置いてあるpackage.jsonが原因じゃない?package.jsonを削除すれば、カレントディレクトリにプロジェクトが作成されると思うよ〜みたいなことを言っていますね。

案の定ホームディレクトリにいつ作ったか覚えてないpackage.jsonが置いてあったので、削除したら無事カレントディレクトリにプロジェクトが作成されるようになりました。

個人的にまぎらわしいCSSのセレクタ

イントロ

数あるCSSセレクタのうち、意味がごっちゃになりやすいものをメモした。

タイプセレクタとclassセレクタの併用

次の例では、タイプセレクタのliとclassセレクタの.itemを続けて記述している(間に半角スペースを含めてはいけない)。<li>タグのclass="item"の要素のみにスタイルが適用される。

li.item {
  font-weight: bold;
}
<p class="item">更新のお知らせ</p>
<ul>
  <li>おまけ</li>
  <!--下記要素のみにスタイルが適用される-->
  <li class="item">ハッピーセット</li>
</ul>

子孫コンビネータ(子孫セレクタ)

複数のセレクタを組み合わせて、ある要素の子要素または孫要素を選択するのが子孫コンピネータ。 次の例では、<ul>に含まれる<li>にだけマッチしてスタイルが適用される。

ul li {
  font-weight: bold;
}
<ul>
  <!--style適用範囲 start-->
  <li>ハッピーセット</li>
  <li>ラッキーセット</li>
  <!--style適用 end-->
</ul>
<ol>
  <li>妖怪ミニカー</li>
  <li>妖怪グラス</li>
</ol>

直下セレクタ(子セレクタ)

複数のセレクタを組み合わせて、ある要素の子要素のみを選択するのが子孫コンピネータ。 次の例では、<ul>に含まれる<li>にだけマッチしてスタイルが適用される。

ul > li {
  font-weight: bold;
}
<ul>
  <!--style適用範囲 start-->
  <li>ハッピーセット</li>
  <li>ラッキーセット</li>
  <!--style適用 end-->
</ul>
<ol>
  <li>妖怪ミニカー</li>
  <li>妖怪グラス</li>
</ol>

セレクタのグループ化

セレクタをグループ化すると、1つのスタイル宣言に対して複数のセレクタを割り当てることができる。次の例では、<p><li>の両方にマッチしてスタイルが適用される。

p, li {
  font-weight: bold;
}
<!--style適用範囲 start-->
<p>お知らせ</p>
<!--style適用 end-->
<ul>
  <!--style適用範囲 start-->
  <li>妖怪ミニカー</li>
  <li>妖怪グラス</li>
  <!--style適用 end-->
</ul>

下記の本を参考にした。