丸善出版の『プログラミング言語Go』の読書履歴です。

出てきた内容の気になったポイントのまとめや練習問題の解答(自分なりの)を記載していきます。
(ここに記載されている内容で問題が生じても責任は負えませんのであしからず…。)

この章では主に変数やパッケージ、スコープについての説明になります。

練習問題があまりないので、各節の気になったポイントを書いていこうと思います。

もくじ

2.1 名前
2.2 宣言
2.3 変数
2.4 代入
2.5 型宣言
2.6 パッケージとファイル
2.7 スコープ

2.1 名前

Go言語では大文字小文字は区別されるので、heapSort と Heapsort は異なる名前になります。
(大抵の言語はそうですけど。)

最初の文字が大文字が小文字かでパッケージ外から見えるかどうかが変わって、大文字だとパッケージ外からアクセス可能になります。

他の言語だと関数名の先頭は小文字っていうのが多いので fmt.Println() とか大文字で始まるのが気持ち悪いなぁと思っていたのですが、なるほどこういうことなのですね。

なので他言語でよく見られる public や private と言ったキーワードがないようです。

関数内で宣言されたローカルなので関数内でしか使えませんが、関数外で宣言された変数はそのパッケージ内からは使うことができます。

2.2 宣言

宣言において重要なものが4種類あって、それは var、const、type、funcで、それぞれ変数、定数、型、関数ですね。

2.3 変数

変数はvarを使って定義して、初期値を設定します。基本構文は以下になります。

具体的に書くこんな感じ。

type か expression の部分を省略することができます。
type が省略されたときは、初期値によって型が決まります。(型推論ですね)
expression が省略された場合はその方に対するゼロ値になります。
数値なら0、真偽値ならfalse、文字列なら””、インタフェースと参照型はnilと言った具合です。

単一宣言で複数の変数を宣言することができて、初期値を宣言時に設定する場合はデータ型が異なっていてもOKです。

2.3.1 省略変数宣言

ローカル変数を宣言して初期化するときに省略変数宣言を使うことができます。

チュートリアルで sep := " " とか出てきてなんだろうと思っていたのですが、ようやく納得ですw

宣言時に初期値を設定しない場合や明示的な型の宣言が必要な場合は var を使います。

諸略変数宣言ですが、複数の変数でもOKで、同じように := を使います。

便利だからと言って多用し過ぎると可読性が落ちてしまうので、ローカル内でそれほど使われないというような変数のみにしたほうがよさそうですね。

2.3.2 ポインタ

おぉ。ポインタ。C/C++以外ではポインタって用語を使う言語が少ないので、ちょっと身構えてしまいますね。
(もともとC/C++プログラマなんですけど、私w)

C/C++のポインタとほぼ同じような考え方です。
ポインタを指す場合は & を使って、ポインタの中身を取り出すときは * を使います。

このようなソースの場合は p は x のポインタ(変数のアドレス)が格納されているので、*p とするとポインタの中身を書き換えるので、x も書き換わります。

うん、C/C++と同じですね。

2.3.3 new関数

変数を作成する別の方法として new 関数があります。

変数名を付ける必要がないときなどに便利そうです。

すごく単純な例ですけど、こういう使い方ができるようです。

2.3.4 変数の保存期間

変数は到達不可能になるまで存在し続け、その後はそのメモリ領域は再利用されるかもしれない、というお話ですね。

ただ、ガベージコレクションが基本的にやってくれるので、そこまで神経質に考える必要はないけれど少し頭に入れておくのはいいとは思います。

2.4 代入

代入するには = を使えばOKです。これまでにも出てきていますが。

+=*=などや++--も使えます。

2.4.1 タプル代入

タプル代入では複数の変数に一度に代入ができます。

以下のような2つの変数の値を交換するという使い方もできます。

今までにも出てきたような関数から複数の値を受け取るようなものもタプル代入ですね。

Go言語は使われない変数を定義することができないので、複数値を返す関数の1つの値しか使わない、という場合には ブランク識別子 _ (アンダースコア) を指定することで安全に破棄してくれるようになります。

例えば、io.Copy() はコピーしたバイト数とエラー値を返しますが、バイト数がいらない場合はブランクにしてあげればOKです。

2.4.2 代入可能性

暗黙的に発生する代入があり、例えば、関数は引数をパラメータ変数に暗黙的に代入するというようなお話ですね。

あとはスライスの初期値の設定なんかもそういうことらしいです。

型によっても変わってくるので、あとの章で説明があるようです。

2.5 型宣言

もともと用意されている型はいろいろありますが、type宣言をすると既存の方と同じ基底型を持つ新しい型を作ることができます。

構文はこのようになります

たとえば、長さの単位毎に型を作って見るとすると以下のようになります。

どちらもflota64を基底型としていますが、まったく別の型として使うことができます。

typeも名前の先頭を大文字で書くとパッケージ外からも使うことができるようになります。

2.6 パッケージとファイル

今までもなんとなく書いてきたpackageについてです。

他の言語と同じように名前空間として機能があって、同じ関数名がバッティングしないようにするために使います。

構文は次のようになります。

同じパッケージに属しているファイルであれば、パッケージ名を使うことなく関数や変数を使うことができます。

練習問題2.1

さて、この章では初めても練習問題です。

書籍の本文に記載されている摂氏、華氏の変換モジュールに絶対温度との変換も追加しなさい、というようなものですね。

とりあえずこんな感じでいいかな、と…
exportedな関数にドックコメントをつけていないとwarningが出てしまいますが、とりあえず面倒なので入れていません(汗)

2.6.1 インポート

パッケージを作ったら、使う場合はインポートをしてあげなければいけません。

今までも fmtやstringsなどなどいろいろとインポートしていたのも同様ですね。

パッケージ名とフォルダ名は一致させておいたほうがいいようです。
なぜならば、インポートで指定するのはフォルダ名なんですよね。

というわけで、私はGOPATHで指定したパスのsrcフォルダのなかに、lessons というフォルダを作っていその中に書籍のソースや練習問題を入れています。
なので、前節のソースコードは $GOPATH/lessons/ch2/tempconv というフォルダに入れてあります。

このtempconvをインポートする場合は下記のように指定してあげればOKです。
$GOPATH/src 以下のパスを指定しないと、標準パッケージを見に行こうとするので、独自パッケージの場合はパスの指定が必要なようです。

こうすると、標準パッケージと同じように tempconv.FToC というように書けるわけです。

練習問題2.2

さてさて、練習問題ですね。
main.goでコマンドライン引数がない場合は、オプションと値を入力してもらうようにしています。
それから、コマンドライン引数の場合は flag を使ってオプションと値を取るようにしました。

2.6.2 パッケージ初期化

パッケージの初期化処理は func init() {...} という特殊な関数を使うことができます。

変数の初期化程度なら、パッケージレベルで行えばいいのですが、処理が複雑になってくるとそれも難しいので、そういうときに init() を使うといいようです。
他の言語のクラスのコンストラクタのようなものですね。最初に必ず実行されます。

練習問題2.3

単一式ではなくループってことなので、こんなかんじ?
性能比較はやっていません…。

練習問題2.4

ビットシフトしながらということなので、こんな感じでしょうか…。
PopCount()のみ書き出しています。他の部分は練習問題2.3と同じです。

練習問題2.5

x&(x-1) は最下位ビットをクリアする、という事実を使ってビット数を求める、ということで自身が無いですが、こんな感じで…
とりあえずは動いてます。

2.7 スコープ

宣言された変数などを参照できる範囲についての説明です。

ブロックは関数やループを囲んでいる {} で囲われた一連の文のことになります。
ブロック内で宣言された変数などはブロック外からは見えません。

具体的な例を出しながら説明されているので、実際に動かしながら見てみるとわかりやすいと思います。

ここでは練習問題はなし!わーいw

2章から結構ボリュームあるなぁ、読み応えあるなぁ、という印象です。
3章は基本データ型について。ここも結構ボリューミィな感じなので、がんばります。

すっかり趣味と化しているかぎ針編み。

そしてもう一つの趣味であるカメラとコラボしてみましたw

カメラを持ってちょっとお出かけ、ってときによく使うショルダーバッグがあるのですが、
さすがにそのまま入れるのは抵抗があるので、巾着に入れてみたり、市販のクッションケースを入れてみたり。

巾着だと出し入れが面倒、クッションケースは出し入れはし易いけどサイズがちょっと大きくて使いにくい…

そこでぴったりサイズのを作っちゃおうー。とw
編み物だと多少のクッション性もあるからいいかな。
でもふにゃふにゃだと使いにくいし。
麻ひもならしっかりと自立したものになるけど、けばが気になるし。
と、いろいろと毛糸を探していると、極太のコットン糸を発見。
レビューを見ると少し固めの糸のようだし、コットンならけばもでないし、季節問わず使える!

というわけで、おなじみ毛糸ピエロさんの姉妹店、毛糸zakkaストアーズさんのこっとん物語を購入しました。

col.1 ホワイトとcol.3 みかんを1カセずつ。

出来上がりはこんな感じです。
糸が足りるか不安でしたが、ちょうど2カセで作れました。

th_DSC04106.jpg

ぱっと見、普通のバッグです。
単品でも使えるように持ち手を付けました。肩掛け出来る長さにしたのでちょっとバランスが悪いですが…w

中はこんな感じになっていて、カメラ(写真はNEX-5ですが、α6000にSEL50F18を付けた状態もOK)とレンズがちょうど入るサイズです。

th_DSC04111.jpg

仕切りもつけていますが、位置を変えることもできるようにしています。
仕切りにはボタンがついていて、バッグの下部と上部、それから底の部分にボタンホールを作ったので、好きな位置にボタンで固定します。

う〜ん、結構満足。すごく満足w

さすがにクッションケースよりはきっちり口が開かないので、出し入れのしやすさは劣りますが、
バッグにぴったりなサイズなのがいいですね。

他にもカメラグッズを編み物で作ったので、またアップしていきます♪

商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。お買い物される際には、必ず商品ページの情報を確認いただきますようお願いいたします。また商品ページが削除された場合は、「最新の情報が表示できませんでした」と表示されます。

\コットンBEST/こっとん物語【綿100%/約97-100gカセ(約105m)…
価格:367円(税込、送料別) (2016/8/30時点)

Webサイトの立ち上げ当初に Let’s Encrypt を導入しましたが、当時はまだベータ版でした。

そろそろ証明書の更新をしないとなぁ、と思って調べていたら、あら、リリース版になってる

というわけで、その時の手順をまとめておきます。

1. Gitのインストール

Gitからクライアントをダウンロードするので、Gitをインストールしておく必要があります。
インストールしていない場合は、以下のコマンドでインストールできるので、やっておいてください。

2. Certbotクライアントのダウンロード

わかりやすいところにダウンロードしておいたほうが良さそうなので、ホームディレクトリに移動しておきましょう。

クライアントはGitからダウンロードするので、次のコマンドを実行します。

ダウンロードが終わったら、一応確認のため、ls コマンドを実行してみます。

certbot が追加されていればOKです。

3. Certbotクライアントのインストール

インストールは簡単です。先ほどダウンロードしたcertbotディレクトリに移動して、 次のコマンドを打ってあげればOKです。

途中パスワードの入力を求められうと思うので、入力してください。

さらに、インストールする内容と確認メッセージが表示されるので、 y と打って、先に進みましょう。

そうすると、必要なパッケージなどがインストールされたり更新されたり、いろいろ自動でやってくれます。

しばらくすると

こんな感じで、インストールが完了して、certbot の実行が始まります。

そうすると、次のような画面が表示されます。

さくらVPS Let's Encrypt ベータ版からリリース版へ更新

どのドメインの証明書を作るか選択します。
私は www 有り無しの両方の証明書を作りたいので、両方の [ ] にチェックをしました。
(クリックでチェックできます)

「了解」をクリックして次に進みます。

そうすると、次のような画面が表示されました。

すでにインストールされているものは上書きしていいか?ということなので、「Expand」をクリックします。
ベータ版の時は wwwありのURLしか証明書を発行していなかったので、wwwありは更新、wwwなしは新規発行ってことになってました。

さくらVPS Let's Encrypt ベータ版からリリース版へ更新

すると、次のような画面が表示されて、HTTPSアクセスの有無を聞かれます。
HTTPもHTTPSアクセスもさせたいので、「Ease」のほうを選択して、「OK」をクリックします。

さくらVPS Let's Encrypt ベータ版からリリース版へ更新

無事、証明書の発行が完了すると(私の場合は再発行も含まれますが)、次のような画面が表示されるので、「了解」をクリックします。

さくらVPS Let's Encrypt ベータ版からリリース版へ更新

最後に次の画面が表示されて、無事インストール完了です。
ここに有効期限も書いてあるので一応確認しておきましょう。

さくらVPS Let's Encrypt ベータ版からリリース版へ更新

まったく初めて証明書を発行したときにはこのあとにApatchの設定ファイルの変更等が必要ですが、すでにやってあるので今回は不要です。
このままで証明書の期限が延びているはずなので、ブラウザから確認してみてください。

5. 証明書の更新

Let’s Encryptの有効期限は90日と短いので、期限が近づいてきたら証明書の更新をしてあげなければいけません。

といっても簡単で、certbotをインストールしたディレクトリに移動します。
私の場合はホームディレクトリなので

としてあげて、それから更新用のコマンドを打ってあげます。

最後に Congratulations と出ていれば更新完了です。
更新ができるのが期限まで1ヶ月切ったくらいなので、期限が十分に残っている状態だと更新できなかったりします。
強制的に更新したいときは --force-renew オプションを付けてあげればOKです。

証明書を見てみると有効期限が延びているはずです。


なんとなく自宅学習しようと思って、丸善出版の『プログラミング言語Go』を買ってみました。
(正確には旦那様に買ってもらった、ですが)

せっかくなので、感想とか練習問題の解答とかを書いて行こうと思います。
最後まで続くといいですねぇ。。。

Goのインストールや開発環境の構築は終わっているものとして話を進めます。

ちなみに私は Atom エディタとターミナルで学習してます。

もくじ

1.1 ハロー、ワールド
1.2 コマンドライン引数
1.3 重複した行を見つける
1.4 GIFアニメーション
1.5 URLから取得
1.6 URLからの並列な取得
1.7 ウェブサーバ
1.8 残りの項目

1.1 ハロー、ワールド

ご存知、ハローワールド。
*書籍がカタカナで書いているので、それに習ってます。

以前旦那様がハローワークを見て、「あぁ、ハローワールドがあるんだねぇ」とつぶやいたくらい
エンジニア的にはお馴染みのワードですね。

細かいことはあとから説明があると思うので、とにかく本に書いてあるコードを写経します。

「Hello, 世界」って斬新だなぁ、とか思ったりもしますが、日本語版の書籍だからですかね。

そんなこんなで実行してみましょう。

このソースの動作確認をするには以下のコマンドを実行します。

Go言語はコンパイル言語なので、指定されたソースファイルをコンパイルして、ライブラリとリンクして、実行ファイルを生成して、それを実行する、というのを run は一度にやってくれるようです。

もちろんコンパイルとリンクをして実行ファイルを作る方法もあって、以下のコマンドを実行します。

そうすると同じディレクトリに「helloworld」というファイルが作られるので、これを実行するには

としてあげます。

run の場合も、build した実行ファイルから実行した場合も

と表示されるはずです。

Go言語は Unicode を扱うので、日本語も化けることなくきちんと表示されますねー。

この章は練習問題はないので次へ!

1.2 コマンドライン引数

この章ではコマンドライン引数の取り方のチュートリアルになっています。

コマンドライン引数は os.Args 取得できます。

os.Args は文字列のスライスです。
スライスはここでは動的に大きさを決めることができる配列だと思っておけばいいでしょう。

スライスの要素にアクセスするには、os.Args[0] と言ったようにJavaなどの他の言語と同じように添字を指定しればOKです。

0番目の要素にはコマンド自身の名前が入ってきて、それ以降の要素がコマンドライン引数になります。

まあ、、、スライスの説明はあとの章で詳しく出てくるようなので、ここではコマンドライン引数の取り方を覚えておけばいいと思います。

書籍に載っているソースコードはここで記載してもしょうがないと思うので、省略します。

というわけで練習問題の解答を…(間違ってても苦情は受け付けません…w)

練習問題1.1

コマンド名も表示されるようにするという問題なので、単純に for のカウンタを 0 からにしてみました。単純すぎ…?

練習問題1.2

個々の引数のインデックスと値を1行毎に表示する、ということなので、単純に fmt.Println() で index と arg を表示するように修正しました。
不要になったソースも削除しています。

練習問題1.3

ベンチマークテストをしろってことなのですが、必要となる知識はこのあとの説明になるのようなので、今回は飛ばします…

知識を得たら再度チャレンジするということにします(汗)

チュートリアルだからなのか、変数の定義の仕方とか、メソッドの使い方とか、そのへんはあまり言及されていないので、ちょっとわからなくなることがありますが、とりあえずいまのところは、そんなものなんだろう、程度にとどめて先に進めることにします。

1.3 重複した行を見つける

この節では、if文、for文、map、標準入力からの読み込みやファイル入出力などの使い方について説明されています。

C言語でお馴染みのfprintfに似た、Fprintfなんかも出てきて、書式指定子なども出てきます。
Go言語ではヴァーブ(verb)って呼ぶようですね。

詳しい説明は書籍を読んでもらうこととして、練習問題をやってみたいと思います。

練習問題1.4

ファイル読み込みで、重複した行のそれぞれが含まれていた全てのファイルの名前を表示するようにする。

私はファイル名の保存用にもう一つ map を追加して、行をキーとして、さらに map ファイル名を追加していく、という流れにしました。

最後にスラッシュ区切りでファイル名を並べた文字列を作成して、重複行と一緒に表示しています。

多重の map にしたので初期化の仕方で手間取ったりもしましたが、一応こんな感じでいいのかな、と…w

1.4 GIFアニメーション

この節ではGo言語の標準画像パッケージの基本的な使い方のチュートリアルになっています。

リサージュ図形というGIFアニメーションを作成するのですが、動いた時はちょっと感動しますw

ここでは、const宣言や構造体型なども出てきますが、詳しくはあとの章で出てくるので、ここではさらっとこんなものもあるという程度にど止めておくのがいいかと思います。

では、練習問題の解答を…

練習問題1.5

リサージュプログラムの背景を黒として、線を緑になるように修正する、というものです。

書籍にRGBでのカラーの作成方法は載っています。緑なので、#00FF00 で作っています。

paletteの0番目が背景色、1番目が線色なので、その順番に黒、緑と指定しています。

修正点はそこだけだったと思います。

練習問題1.6

リサージュプログラムを修正して、paletteに色をもっと追加して、複数の色で画像を生成しなさい、というものです。

paletteには赤、青、緑を追加しています。

SetColorIndex の代3引数を変更して、ということだったので、paletteの1〜3の色を使って順に色が変わるようにしてみました。

これでいいのかな…。

1.5 URLから取得

この節ではHTTPを使って情報を取得する簡単なチュートリアルになっています。

引数で渡されたURLからHTMLを取得する、といったものです。

http.Get(url)で取得できちゃうので、すごく簡単ですね。

というわけで、練習問題を…。

練習問題1.7

ioutil.ReadAll の代わりに io.Copy を使いなさい、というものです。

io.Copy の使い方とかいろいろ調べたりして時間がかかりましたが、問題をきちんと読んでからやれば簡単でした…。

基本的には ioutil.ReadAllio.Copy に置き換えただけなのですが、io.Copy の出力先を os.Stdout にしてあげればOKです。

エラーは取らないといけないので、戻り値は _, err にする必要があります。

練習問題1.8

コマンドライン引数で渡される url に http://がなければ追加する、というものです。

strings.HasPrefix が使えるというヒントが載っているので、そちらを使ってみます。

引数を取得したところで、http:// があるかないか判定をして、なければ追加するようにしています。

ハードコードしてますが、許してください…w

練習問題1.9

さて、最後の練習問題。この節は問題が多くて辛いですw

resp.Status に設定されている HTTP ステータスコードも表示するように、というものです。

何か問題の意味を履き違えているかもしませんが、とりあえず表示する処理を最後に追加しています。

1.6 URLからの並列な取得

ここでは並列プログラミングについてのチュートリアルになります。

Go言語の並列処理を行うゴルーチンとチャネルについて簡単に触れられていますが、詳しくはあとの章で説明されるようなので、ここではこんなふうに使えるんだ、くらいにとどめておくのがいいと思います。

練習問題1.10

fetchall プログラムの出力をファイルに保存するように修正しなさい、というものです。

特にヒントも書いていないので、file.Write を使ってみましたが、もっと簡単に書ける方法はないのかしら…。

これで一応、同じ内容が log.txt というファイルに保存されるようになります。

1.7 ウェブサーバ

簡単なウェブサーバの作り方のチュートリアルです。

なんか、すごく少ないコード量で動いてしまうので驚きました。

バックグランドでプログラムを起動させる方法が載っているので、以下のコマンドのように & を付けて起動します。

この後にサーバーを終了しないといけないの、その手順を。(旦那様には常識だって言われたけど…)

まず、起動時に以下のような数字が表示されます。これはプロセス番号になっています。

色々動かしたあとですでに起動時のログが見つからない、という場合は以下のコマンドを打ってください。

そうすると、現在起動されているプロセスの一覧が表示されます。

もっとたくさんあるかもしれませんが、一覧の中から自分が起動したアプリがあるはずなので、先頭に記載されている PID の部分がプロセス番号になります。

で、そのプロセス番号を使って、kill します。

これだけだとまだlocalhost:8000にアクセスできてしまうので、次のコマンドを打って、8000ポートを使っているプロセスを探します。

8000ポートを使っているプロセスの一覧が表示されます。

ここで main と書いてあるのが、今起動しているプログラムで、PID はプロセス番号になります。

なので、このプロセス番号を使って再度 kill します。

これでようやく全部のプロセスが終了するので、改めてプログラムを起動することができます。

が、、、面倒なので、バックグランドで起動させずに通常起動させて、Ctrl + C で終了させたほうがラクだと思います。

書籍では1.6 URLからの取得で作成した fetch プログラムと合わせて使うためにバックグランドで起動しているようですが、もうひとつターミナルを起動すればいいだけなので、通常起動のほうがなにかと便利かと思います。たぶん…。

練習問題1.12

文中でリエージュ図形と組み合わせるプログラムを書くのですが、それの修正になります。
リエージュ図形のソース部分は 1.4 GIFアニメーション で作ったものを流用しています。

パラメータを取得して、それを使ってリエージュ図形を変える、という感じです。

cyclesをパラメータで取得して、lissajous()に渡すように変更しました。

1.8 残りの項目

この節はswitch、名前付き型、ポインタ、メソッドとインタフェース、パッケージ、コメントについての簡単な説明になっています。

基本的には読み物で、ソースコードも記載されていますが、実際に書いて動かく必要はないかな、という感じです。

どれもこのあとの章で詳しく説明があると思うので、さらっと流してしまうのがいいでしょう。

この章は練習問題はないので、ここまで!

ようやくチュートリアルが終わりました…。地味に難しかったです、練習問題(汗)

さて、次は第2章 プログラム構造です。変数やパッケージ、スコープなどの説明が出てくるようです。

練習問題もちょくちょくあるようなので、がんばります…w

当たり前ですが細かい説明は書籍を読んでくださいね。

最近すっかりかぎ針編みの編み物が大好きになってしまった私です。

ネットで編み方動画や編み図を公開してくれている人がたくさんいるので、ネタには困りませんね(笑)

今回は meetang &co. さんが Youtube に編み方を公開していた春夏用の帽子を編んでみました♪

動画では 毛糸 ピエロさんのAmian(アミアン)という糸を使っていたのですが、私はハマナカのエコアンダリヤという糸を使いました。

去年も帽子を編んでいて余りがあったので…(笑)

出来上がりはこんな感じです。

th_DSC03060.jpg

動画より高さを2段減らして、つばのサイズは同じにしました。
途中からボーダーになるように配色も変えてみました。
使ったエコアンダリヤの色はメインのcol.23 シナモン、ボーダーの部分が col.69 マンダリンオレンジ です。

使ったかぎ針は動画と同じ7号針です。
私には少し大きかったかなぁ、という感じだったので、6号針でもよかったのかも。
まぁ、そのへんはまた来年w

エコアンダリヤはアミアンよりも柔らかいのか、私の編み方が緩いのか、動画のようにつばの先が反り返ることなく、だらんとしています。
エコアンダリアの場合はつばの先は減らし目をしたほうがいいのかもしれないですね。
まぁ、これはこれでかわいいからいいかなーと思ってます♪

作り方動画こちらですー。とってもわかりやすいので参考にしてみてください。

使用糸のエコアンダリヤはこちらです。

Androidアプリを開発していると、広告を入れることが良くあります。

私は AdMob を使っているのですが、開発中に自分の端末で間違えてクリックして、アカウント停止になったことあります(汗)

AdMob は開発中に本番用の広告IDを使うことは推奨していないので、開発中は AdMob のチュートリアルに記載されているテスト用のIDを必ず使いましょう。

それから、開発時に使う端末はテストデバイスとして登録しておけばOKです。

ただ、端末IDの取得方法がよくわからなかったのですよね。

よくよくログを見てみると、Adsの読み込みが終わった後に、以下の様なログが出ていたのです。

ここに表示されている通りに AdRequest.Builder をするときに addTestDevice(“XXXXXXXXXXXXXXX”) としてあげれば、テスト表示に代わりました。

複数テスト端末がある場合は、以下のように addTestDevice() を複数書いてあげればOKです。

これでアカウント停止処分になることがなくなればいいなぁ…w