2016年2月16日火曜日

開発初心者がこれだけは知っておいた方が良いこと②

こんにちは!Sです。
前回に引き続き「開発初心者がこれだけは知っておいた方が良いこと」について書いていきます。

今回のテーマは「おかしいところの見つけ方について」です。

ネットで調べて見よう見まねで書いてみたけれど上手く動かない。。。という時に
早くどこがおかしいのかを見つける方法について書いていきます。


<エラー画面が表示されている場合>

①ログを見る
 新規作成の場合は自分でログをはくように設定しないといけませんが、
 既存のファイルの修正であればおそらく既にエラーが起きた際にエラーログを出力するように
 設定されているはずです。
 なのでまずはソースからログの出力先を調べて、ログを見に行きましょう!


<エラー画面は表示されていないが、やりたいことが出来ていない場合>

①デバッグする
 ここがおかしいのかも。という怪しい場所付近にブレークポイントを設けて、
 デバッグして下さい。きっとヒントになるはずです。
 ▼最初にマスターしたいVisual Studioのデバッグ機能 -基本編-
 http://news.mynavi.jp/articles/2008/08/18/debug/

②Response.Writeを使う
複数の処理を連続して行っており、それらのどれが原因かを調べるのに便利です。
例えば...
aに対して処理B、C、Dを連続して行うのであれば一旦それらを分けてみましょう!

Response.Write(a);
Response.Write(b);  //bはaにBの処理をしたもの
Response.Write(c);  //cはbにCの処理をしたもの
Response.Write(d);  //dはcにDの処理をしたもの

これでブラウザにa,b,c,dが表示されるので、処理のどの段階でおかしなことになっているのかが一目瞭然です。


2016年2月12日金曜日

【Android】AppIndexingを設定してみた

こんにちは。エンジニアのKです。

【Android】AppIndexingを実装してみたの続きです。
前回までで最低限必要な実装は完了しましたが、
ディープリンクのテスト方法や、「Google Play Developer Console」、「Search Console」への登録方法でも
公式ドキュメントを読んだだけではピンと来ない部分があったので、補足できればと思います。

ディープリンクをテストする

実装したディープリンクがAppIndexingとして正常に動作するかテストします。
公式ドキュメント:App Indexing の実装をテストするの前半

方法としては、公式ドキュメントにあるADBでインテントを飛ばすやり方と、アプリがインストールされた端末のブラウザで、android-app://のリンクを踏んでみるやり方の2つがあります。

ADBでインテントを飛ばす

端末をUSBで接続し、コマンドラインから公式ドキュメントにあるドキュメントを実行すると、インテントが飛びます。
ディープリンクが正しく実装できていれば、アプリのコンテンツが立ち上がるはずです。
以下は、Android StudioのTerminalで実行した結果です。


実装が上手く行っていない、飛ばすインテントが誤っていると、「Error: Activity not started, unable to resolve Intent」といったエラーが表示されると思いますので、実装に誤りがないかを確認しましょう。

android-app://のリンクを踏む

webページを自由に変更できる環境があれば、aタグにテストURLを埋め込んでブラウザでアクセスします。
そういった環境がない場合は、公式ドキュメントにあるQRコード経由でアクセスすると便利だと思います。
前回の記事でも書きましたが、テストURLは

android-app://com.recipe-app/http/recipe/pierogi-poutine
android-app://com.recipe-app/recipe-app/recipe/pierogi-poutine

といったものになります。


AppIndexing APIをテストする

AppIndexing APIが正常に動作しているかも確認しておきます。
公式ドキュメント:App Indexing の実装をテストするの後半

これもアプリをインストールした端末をUSBでPCに接続し、ターミナルにコマンドを打ち込みます。
AppIndexing APIが起動する処理を通るようにアプリを操作すると、以下の様なログが出力されるはずです。
title, description, appUri, webUriが正しい値になっていればOKです。
マルチバイト文字を含めるとログ出力が文字化けしてしまいますが、URLエンコード処理は不要です。
試しにこのままリリースしてクロールさせたところ、検索結果に表示されるAppIndexingのリンクは文字化けしていませんでした。



Search Consoleにアプリを登録する

まずはSearch Consoleにアプリとしてプロパティを追加します。
公式ドキュメント:アプリの Search Console

Search Consoleにログインし、公式ドキュメントにあるようにandroid-app://のURLでプロパティを追加します。
すると、以下の画像のように、「Androidアプリ」のプロパティが追加されます。




Search Consoleでクロールテストをする

Search Consoleに登録すると、アプリに対しても「Fetch as Google」を行うことができます。(2016/02時点でアルファ版)
テスト対象のアプリは、基本的にはGoogle Playで配布されている最新版のapkですが、この場でapkファイルをアップロードして試す事もできるようです。
言語を選択するセレクトボックスは「日本語」にした方が良さそうです。「英語」のまま実行したらエラーになってしまいました。

広告SDK等が含まれていると、広告で読み込まれる一部リソースがブロックされ「一部完了」のステータスになりますが、
正常にレンダリングされていれば問題ないと思います。


アプリとWebサイトを紐付ける

ここまで確認できたら、あとはアプリとwebサイトを紐付けて、GoogleにAppIndexingしてもらいます。
公式ドキュメント:アプリをサイトに関連付ける
※前提として、ディープリンクに対応したアプリをGoogle Playで公開している必要があります。

紐付け方はGoogle Playから行う方法と、Search Consoleから行う方法があります。
今回はGoogle PlayのサービスとAPIからwebサイトのURLを入力する方法で行ってみました。
すると、Search Console側に「{googleアカウント} が Android アプリ {パッケージID} を {webサイトURL} と関連付ける権限をリクエストしています」といったタイトルのメッセージが届きますので、承認しましょう。

これで、必要な作業は全て完了となります。
ここから徐々にgooglebotのによるアプリクロールが開始され、3-5日程度でSearch Console上でクロールステータスを確認することができると思います。
以下が実際のクロールステータスの画面ですが、クロール開始直後はエラーが大量に発生してしまいました。
ですが、特に何もせず様子を見ていたところ、エラーは0件となり、インデックス数が増加していきました。



インデックス数が増え始めると、その更に数日後(5日程度かかった)、google検索結果にAppIndexingのリンクが表示されるようになると思います。

2016年2月9日火曜日

C# 列挙型 enum

こんにちは山田です。

開発言語:C#

C#の基本構文でいまいち呑み込めなかった部分について
わからないなりに解説をしようと思います。

~良くわかっていない人による解説~

■列挙型とは (enum)
特定の値しか取らないようなものに対して使用します。
たとえば曜日だったら 月~日までの7つのみになります。
この曜日を例に取り上げていこうと思います。

■基本構文

【定義の仕方】
列挙型の宣言はenumをはじめに記述し、つづいて列挙型の名前を記述します。
-------------------------------------------------
enum 列挙型名
{
  メンバー1, メンバー2, …, メンバーn    ←列挙定数
}
-------------------------------------------------

例1)
-------------------------------------------------
enum Week
{
Sun, Mon, Tue, Wed, Thu, Fri, Sat
}
-------------------------------------------------
そしてそれぞれの識別子には0から順番に1ずつ増える整数値が割り当てられます。

Sun:0
Mon:1
Tue:2
 :
Sun:6


例2)
-------------------------------------------------
enum Week
{
 Sun, Mon=100, Tue, Wed, Thu, Fri=200, Sat
}
-------------------------------------------------
もし任意の値を代入すると、そこから1ずつ増加します

Sun:0
Mon:100
Tue:101
Wed:102
Thu:103
Fri:200
Sat:201

例3)
列挙要素の基になる既定の型はintですが、
Int型以外で整数値を使いたい場合は以下ように記述します。
-------------------------------------------------
enum Week : byte
{
 Sun =1
 ,Mon =2
 ,Tue =3
 ,Wed =4
 ,Thu =5
 ,Fri =6
 ,Sat =7
}
-------------------------------------------------
他にはこんな型が使用できます。
byte、sbyte、short、ushort、int、uint、long、ulong


【利用する方法】

識別子を参照する時は以下のように記述します
----------------------------
列挙型名.メンバー名
----------------------------

例4)
using System;

class Sample
{
 protected enum Week : int
 {
 Sun =1
 ,Mon =20
 ,Tue =30
 ,Wed =40
 ,Thu =50
 ,Fri =60
 ,Sat =70
 }

 /// 
 /// 日本語の曜日をただ返すプログラム
 /// 
 protected void SampleProgram(Week[] _day){
  for (int i = 0; i < _day.Length; i++)
  {
   switch (_day[i])
   {
    case Week.Sun: Console.Write("日曜"); break;
    case Week.Mon: Console.Write("月曜"); break;
    case Week.Tue: Console.Write("火曜"); break;
    case Week.Wed: Console.Write("水曜"); break;
    case Week.Thu: Console.Write("木曜"); break;
    case Week.Fri: Console.Write("金曜"); break;
    case Week.Sat: Console.Write("土曜"); break;
   }
  } 
 }

 static void Main()
 {
  Week[] day = new Week[] { Week.Mon, Week.Tue, Week.Wed, Week.Thu, Week.Fri, Week.Sat, Week.Sun };
  SampleProgram(day);
    }
}

結果:月曜火曜水曜木曜金曜土曜日曜

すごく微妙なサンプルになったと思いました。


■ちなみに整数値の方を使用したいときは、
以下のように型変換すればOKです。
----------------------------
(整数型)列挙型名.メンバー名
----------------------------


■その他こわざ

参考になった応用の例です。
・enumの値を任意の文字列に変換する
・数値がenumで定義済みがどうかチェックする
・enumの値を列挙する
http://qiita.com/hugo-sb/items/38fe86a09e8e0865d471

2016年2月8日月曜日

フロントエンド・タスクランナー(2: Gulp インストール編)

お疲れ様です。
先日薬を貰うために薬局のソファでぼーっと待っていた所、目の前を通り過ぎたおばあさんのバッグから飛び出ていた先端の鋭い牛蒡が目に突き刺さりそうになるという、恐ろしい思いをしましたふみえです。

さて、今回は前回の続きということで、タスクランナー Gulp を実際にインストールしていきます。
構築環境は OS X El Capitan バージョン10.11.3です。

0. 前提条件

Xcode をインストールしていること

1. Homebrew インストール

OS X 用タスクマネージャー Home Brew をインストールします。
こちらのページに遷移後、表示されているコマンドをターミナルで実行します。
$ brew -v
でバージョンが表示されたらインストール成功です。

2. rbenv インストール

rbenv は Ruby のバージョン・マネージャーです。rvm の後発という安易な理由で、こちらをインストールしていきます。
$ brew install rbenv
※ もしかしたら sudo で実行したほうが良いかもしれないです。
パスを通します。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

$ rbenv -v
こちらでバージョンが表示されたら成功です!

3. nvm をインストール

nvm の github のページにて、curl で最新のバージョンのものを持ってきます。今回は v0.30.2 です。
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
ここまで来たら、ターミナルを閉じて再度起動してください。
使用したい node のバージョンを下記のように指定します。
$ nvm install v4.2.6


4-1. Gulp をグローバルインストール

いよいよ Gulp をグローバルインストールします。
$ npm install -g gulp
次に任意のプロジェクト(ディレクトリ)を作成し、移動します。今回は gulp_test ディレクトリ(プロジェクト)を作成していきます。
$ mkdir gulp_test

$ cd gulp_test
ここで、プロジェクトのパッケージを管理するための package.json を下記のコマンドで自動作成させます。要するに npm の初期設定です。
この初期設定は対話形式で行われます。特別な設定が無いならずっと Return キー押下で問題ありません。最後に"Is this ok?"ときかれるので、yes とこたえましょう(^o^)
$ 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  --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: (gulp_test)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/toyooka/gulp_test/package.json:

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


Is this ok? (yes) yes
この結果、package.json ファイルが作成されます。デフォルトの中身は以下のようになります。
  {
    "name": "gulp_test",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "gulp": "^3.9.0"
    }
  }


4-2. カレントディレクトリ内で gulp に依存関係をもたせる

先ほど行ったのは gulp のグローバルインストールになりますが、これから行うのは、今いるプロジェクト用に gulp をインストールし、先ほどの package.json に 'devDependencies' を追記してくれるコマンドです。
  $ npm install gulp --save-dev
これで、package.json の中身を確認してみましょう。ファイル内に devDependencies が追記されました。
  "devDependencies": {
    "gulp": "^3.9.0"
  }
さらに、node_module というディレクトリができて、 gulp さんがいらっしゃるのが確認できます。

5. Gulp を設定する

このプロジェクト内で gulp を動かすためには gulpfile.js を作成しなければなりません。
  var gulp = require('gulp');


6. Sass を Gulp で動かしてみる

Gulp の動作確認のために、gulp で Sass を動かしてみましょう。その準備として、sass/style.scss ファイルにネストした適当なコードを書いて保存します。
  header {
    font-size: 15px;
    line-height: 1;

    span {
      font-weight: bold;
    }
  }
次に gulp で Sass をコンパイルできるように gulp-sass というパッケージをインストールします。
  $ npm install gulp-sass --save-dev
上記コマンド実行後に package.json ファイルを見てみてください。devDependencies に下記の行が追加されていることを確認しましょう。
  "gulp-sass": "^2.1.1"
次に、gulpfile.js に Sass の設定をしていきます。
  var gulp = require("gulp"); // gulp の読み込み
  var sass = require("gulp-sass"); // gulp-sass の読み込み

  // sass コンパイルのタスク処理
  gulp.task('sass', function(){
    gulp.src('sass/style.scss') // コンパイルしたいファイルを指定
        .pipe(sass())
        .pipe(gulp.dest('./css')); // css ディレクトリ以下にコンパイルしたファイルを置く
  });
.pipe() は src で指定したファイルに対してその中で指定した処理を施す命令です。チェーンで次々に処理をつなぐことができます。
これで、準備完了です!それでは、コンパイルさせてみましょう!
  $ gulp sass
css ディレクトリの中に style.css が生成されていると思います。では、その中身を確認してみましょう!
  header {
  font-size: 15px;
  line-height: 1; }
  header span {
    font-weight: bold; }
ドドン!!ちょっと括弧の位置やインデントが微妙ですが、Sass のファイルが CSS ファイルにコンパイルされました(^o^)

こんな感じでいろいろな処理を自動化させてしまいましょう!!

参考記事:

2016年2月5日金曜日

アプリのプロトタイピングツールを使い倒してみる② -お手軽プロト「POP」ー

おかだです。

前回の投稿に引き続き、アプリのプロトタイピングツールについて実際に使ってみた感じを合わせて、少しずつご紹介していきます!


プロトタイピングツールを使う前に

プロトタイピングツールを使う前に、気を付けたほうがいいなと思うことがあります。

実際、プロトタイピングはとっても楽しいです。

たのしさへの期待感のあまり、いきなりツールを使い始めてしまうこともしばしば、、、、

ある?かもしれませんが、それはダメです。時間の無駄です。


ツールを使ってプロトタイプを作る前に、まずお絵かきをしましょう。

アプリの画面や遷移の構成を考えるのが本筋です。




ですが今回は、プロトタイピングツールを使ってみることが本筋なので、簡単にうさちゃんアプリの絵をかいてみました。

何をするアプリなのかよくわかりませんが、これを使って、プロトタイピング、するぞー!(こんな雑な絵で大丈夫か、不安です)

うさちゃんアプリ

お手軽プロトタイピング「POP」

POPは、いままで試したプロトタイピングツールのなかでは1,2位を争うお手軽さが特徴です。

メールアドレスだけで、無料で使えます!

また、ブラウザ版だけでなく、専用のAndroidアプリもあり、プロジェクトを共有できるので
実際に端末で動きのイメージを確認することもできます。

詳しい使い方をご紹介されているページがありましたので、参照させていただきます。




「POP」のいいところ

実際にうさちゃんアプリを作ってみて、いいなと思ったのは

「めっちゃお手軽!」なところです。

さきほどのうさちゃんアプリの各画面のお絵かきを写メで撮影して

それをPOPアプリでそのまま使って、ボタンの遷移などを設定することができてしまいます。

かなりお手軽!!!そして日本語対応!!!!!!(とってもいいです)

また、自分のプロジェクトを作る前から、見本のプロジェクトが入っているので

アプリのディレクターさん以外の方やプロトタイプ初めてやってみる方も、使いやすいと思います。




「POP」のちょっと不便なところ

ちょっと不便なところは、画面内のこまか~いところを再現できないところです。

もしかしたらプロトタイピングツールあるあるなのかもしれませんが

・ヘッダー固定ができない
・リストビューのスクロールができない

など、ちょっとここはこう動いてほしいのになー!というところに手が届かない感じがしました。

お手軽な反面、できないこともある程度あるみたいです。



「POP」でこんなことできるよ!

大まかな画面遷移を再現するだけならとてもお手軽にできるので

アプリの構想段階で、ある程度の構成をプロトタイプしてアプリのイメージをメンバーに共有するのが

かなり簡単にできると思いました!




今日はおしまいです。TGIF!!