のにっき

teratailで質問する前にやっておくべき事

teratailを質問者として利用してばかりじゃ申し訳ないと思い、
若輩者なりに回答者としていくつか回答してみました。
その中で、質問者として最低限行ってほしいと思ったことをまとめます。
※必ずしろ!というわけではなく、してもらえると回答シヤスイナーです

teratailとは?

プログラム実装で詰まったら質問できるサイトです。
私のように教わる人のいない状況で勉強している方には非常に便利なサイトになります。
teratail.com

ソースコードを貼るときはタグで囲む

これは必ず行って下さい。利用する方でできていない方が結構います。
teratailは、ソースコードをタグで囲むことで見やすくする機能があります。

f:id:apuridasuo:20191019112223p:plain
図:タグ説明
記入方法を以下にまとめるので知らない方は必ず確認して下さい!
f:id:apuridasuo:20191019112350p:plain
図:ソースコード記入方法
この書き方でソースコードを記入すれば、背景色も変わり、
コメントや変数などの色付けもされてとても見やすい表示になります。
f:id:apuridasuo:20191019112755p:plain
図:プレビュー結果

エラーの内容でググる

バグが発生して何が間違っているのかわからない場合、
ログにエラーが出ていないか確認してみて下さい。
そして、エラーの文字をコピーしてググってみましょう。
意外とネットには解決方法が載っているので質問する前に解決できます。

自分の書いたソースを理解してから質問する

ソースコードをコピペしてバグって訳がわからない!ということがあった場合、
そのまま質問しても、回答者の回答が何を言っているのか分からないと思います。
コピペしたコードを部分的にググってみて、
自分の書いたソースの内容をある程度勉強して下さい。
そうすれば、バグの原因がわからないとしても、
回答者が何をいっているのか理解することができると思います。

質問したいこと、求めている回答を明確にした質問をする

何が分からないか分からないという状況で質問しないよう気をつけましょう
・何を目的としたコードを組んでいるか
・現在の挙動はどうなっているか
・何を回答してほしいか
以上の項目は自分で考えて、明確にしてから質問しましょう。

自分でソースの状況を把握しておく

ソースの組み込みを行う上で、
プログラムの実行中に一時停止を行って変数の内容などを確認たりします。
そういったデバッグ方法をいくつかご紹介します。
※実装環境でやり方は異なるので、「VisualStudio ブレーク 方法」
 のように検索していただけると方法が出てくると思います。

  • ブレーク(ポイント)

ブレークは、設定した場所で処理を一時停止させる機能です。
ブレークポイントを設定した状態でプログラムを実行すると
設定した場所に処理が到達した時点でプログラムが一時停止します。
ブレークポイントを設定することを「ブレークを貼る」ということがあります。
【使用例】
・if文等の分岐でブレークを貼ってどの分岐が通っているか調べる
・問題のある処理でブレークを貼って、その時の変数の値などを確認する
・反応しない関数を呼ぶ処理にブレークを貼ってその処理が通っているか調べる

  • ログ(メッセージ)

ログは、処理の中で指定した文字をコンソール等の、
実際には影響のない部分に出力させる機能です。
【使用例】
・if文等の分岐で通ってはいけない場所にログを実装して「ログ出力=バグ」とする
・変数設定後に変数の内容をログで出力する事で見えない変数の内容を把握する
これらのデバッグ方法を使って質問の前に
不具合の原因を探してみてある程度の目星をつけておくと
回答者とのやり取りが非常にスムーズになります。

質問しない!

上記のデバッグ方法とネットの力を駆使したら
メジャーな問題はたいてい解決できます。
まずは自力で解決する!これが良い質問をする最大のコツだと思います。
自力で解決する努力を行うことで問題への理解が深まり、
質問する際に相手に伝えるべき項目をまとめて質問することができます。
また、回答者は専門的な用語を踏まえて回答をくれるときが多いですが
調べることに慣れていると戸惑わずに対応できると思います。

以上になります。
回答者の方々はきちんと対応すれば良い方ばかりです。
変な感じになったな~と思ったら大体自分の対応が悪かったと思って
めげずに頑張って下さい。

今後アニメ化されそうなコミック紹介

あまりに暇なので、完全に趣味ですが

Amazon商品紹介機能を試しに使ってみたいと思います。

 今後、アニメ化確実のおもしろ漫画をご紹介

暇なときに本ばっかり読んでたら結構な数になっていました。

しかも、最近私が読んでる本がことごとくアニメ化されていたことを知り、

私が読んで面白かった本は全部アニメ化される理論で面白かったものをご紹介します。

あらすじも私が適当に書いてるので変なとこあったらご勘弁を!

 

あやかしこ【現6巻】

・アニメ化される度

 ★★★★★【5/5】

・ジャンル

ほのぼの日常系、絵が綺麗、非4コマ 

・あらすじ

主人公はちょっと引っ込み思案な女子高生マホロ。

そんなマホロが住む家「あやかし荘」には3人の妖が住んでます。

引っ込み思案なマホロが唯一自分らしく接することが出来る妖たち。

個性豊かな妖たちとのドタバタコメディーや、

妖を通じて成長するマホロの人間ドラマを描いた作品。

・感想

絵もきれいでキャラに個性があってちゃんと話に落ちがある。

ストーリーが進むにつれてマホロの世界も広がっていって

新しい面白さがどんどん押し寄せてくるので飽きることがない。

パワプロで言ったらオールA評価なぐらいバランス良く全部良い作品です。

1巻読んでから「確実に人気出るしアニメ化されるわー」と思ってたら

全然アニメ化されないからもどかしい気持ちでいっぱいです。

 じけんじゃけん【現6巻】

じけんじゃけん! 1 (ヤングアニマルコミックス)

じけんじゃけん! 1 (ヤングアニマルコミックス)

 

・アニメ化される度

 ★★★★☆【4/5】

・ジャンル

ギャグ、学園もの、推理?もの、非4コマ 

・あらすじ

舞台はある高校の同好会「ミステリ研究会」。

ミステリが絡むと真っ直ぐな馬鹿になる会長ゆりこと、

ゆりこに探偵の才能を認められた、唯一の会員にしてミステリ素人といり。

学校の日常もユリコにかかれば謎となる!

時にはユリコが死体となって謎を作っちゃう突拍子もないアホな行動に

翻弄されるといり達を描く探偵?コメディー

・感想

ユリコが突拍子もない事をやるけど、読んでて「こいつならやるわぁ~」

と納得できるぐらいちゃんと各キャラの人間性を描いてくれている。

日常に潜むアホを丁寧に描写しているので要所要所で腹抱えて笑える。

アニメ化しそうだなと思った理由は、

キャラの決め台詞が決まっていてバズりそう。

ちょいちょい作者の性癖が垣間見えるエロ要素がある。

ので、アニメ化したら人気が出そうだなと思ったからです。

スライム倒して300年、知らないうちにレベルMAXになってました 【現5巻】

・アニメ化される度

 ★★★★☆【4/5】

・ジャンル

異世界転生もの、ほのぼの日常、非4コマ 

・あらすじ

過労で死んじゃったけど不老不死の力を手に入れて異世界に転生したアズサ。

現世でできなかったスローライフを300年送っていたアズサだが、

日課としていたスライム退治のおかげでLvMaxの最強魔女に!?

だけど別に冒険しません。ゆったりほのぼの異世界を楽しみます。

普通じゃない最強魔女の、普通な日常を楽しく描いた作品。

・感想

今流行というかお腹いっぱいの異世界転生ものだけど、

中身がしっかり面白いから関係なく楽しめる作品。

アズサが「現世での実体験」からスローライフ意識をちゃんと持ってるからこそ、

異世界の人たちと交流を深めていく過程で

「周りをしっかり巻き込んでほのぼのさせる努力をする」ので

皆が周りのことを考えるようになる優しい成長がしっかり見れる面白さがあります。

原作はラノベなのですが、原作も面白いのでぜひ読んでみて下さい。

どうせ異世界転生ものばっかりアニメ化するなら早いところこの作品をアニメ化してほしいです。

 

まとめ

まだまだ紹介したかったのですが、あらすじと感想書くのだるいです!

2作品目で完全に飽きました・・・(泣)

また暇なときに書いてみたいと思います。

クラス配列作成時に要素がnullになるのを防ぐ方法

最近、Listばっかり野郎から、配列も使ってやろうに変化したのですが、

クラス型の配列を作成した時の問題と対応をまとめておきます。

配列定義時の中身が・・・

適当なクラスの配列を作成してみます。

        // 適当クラス
        public class TestClass
        {
            public int _Id = 0;
            public string _Name = "";
        }
        // 起動時イベント
        void Start()
        {
            TestClass[] a_TestClass;
            a_TestClass= new TestClass[10];
            // ↓↓変数に値を設定しようとするとエラーになる↓↓
            a_TestClass[0]._Id = 1;
        }

こんな感じでクラス配列を作成した後、
要素のクラスに変数を設定しようとするとエラーになるはずです。
この理由は、
「クラス型の配列作成時、要素は全てnullになっている!」からです。
なので、すべての要素にインスタンスを作成する処理

    a_TestClass[0]= new TestClass();

この処理を行わないと変数の設定ができません。。。

LINQをつかって一気にやってしまおう!

インスタンス作成処理をfor文で回してもいいのですが、
ただの配列作成処理なんだからスッキリさせたいです。
こんな時に重宝するのがLINQです。
配列作成の処理にSelect文をつかって1行で完結させましょう

        // 起動時イベント
        void Start()
        {
            TestClass[] a_TestClass;
            a_TestClass= new TestClass[10].Select(x => { return new TestClass(); }).ToArray();
            // ↓↓エラーにならない!↓↓
            a_TestClass[0]._Id = 1;
        }

こんな感じで配列作成と要素にインスタンス作成の処理を1行でできます。

配列を使うメリットって何だろう?

最近、なんとなくですがListの必要がないものは
なるべく配列で組み込むようにしているのですが、
まぁまぁ良かったことをまとめときます

◆ 良かったこと

  • 配列は作成した瞬間から要素が出来ているので、一時的にクラスを作る必要がない
  • 高さが変動しないので、範囲外系のエラー時の原因追及がしやすい
  • ToLinq、ToArrayがあるのでそこまで自由度が低くなることはそんなにない
  • 「高さが変わらないなら配列」という明確なルールを持ってListと使い分けることで、型を見ただけで自分の意図が分かるからコードを読み返すときに楽

以上です
今更ですが配列は配列できっちりしていて好きになりました。

UnityでNuGetパッケージを使用してIL2CPPを使用した時の参照エラー対策

初めてUnityでNuGetパッケージを使用してみたのですが、

IL2CPPでビルドした場合のみでバグが発生してしまいました。

今回、解決までの四苦八苦をまとめておきます。

 

NuGetパッケージ導入方法

qiita.com

この記事を参考にNuGetパッケージを導入しました。

「Scropting Backend」の設定をIL2CPPではなく、Monoで

ビルドを行った際には何も問題なく動いていました。

 

エラー内容

公開前に、いざ64bitに対応させようと思いIL2CPPに切り替えてビルドした結果、

実機でデバッグした際に上手く動かない!

f:id:apuridasuo:20190926111653p:plain

図:実機ログのエラー内容


今回、私はNuGetパッケージから「Taglib」というパッケージを導入していました。

その中のクラスが見つからない。。。という参照エラーが発生していました。

 

対応内容

1. Projectの「Assets」フォルダ内に「link.xml」という名前のファイルを追加

※「Assets」フォルダ以下ならどこでもOKらしい・・・

2.「 link.xml 」に以下のコードを記入

<linker>
       <assembly fullname="DLLファイル名(拡張子を除く)" preserve="all"/>
</linker>

f:id:apuridasuo:20190926113111p:plain

図:今回のエラー対応を行ったlink.xmlファイル内容

対応は以上です。あとはいつも通りビルドしていただければ
参照エラーは直っています。

エラー原因

docs.unity3d.com

上記の参考サイトにも書いているのですが、

自分なりにかみ砕いた解釈をまとめると・・・(間違ってたらすみません)

IL2CPPでビルドすると、ユーザーが手動で追加したdllは削除される。

だから、「link.xml」で手動追加dllの削除・保持を指定する必要がある。

※.厳密には、手動追加かつGameObjectに設定したスプリクトファイルの

コードが呼び出していないクラスが削除される。と書いてましたが、

ちゃんと呼び出すようにコードを変更しても意味が無かったので

何をしても手動dllは削除される。という考えで対策することにしました。

 

最後に

今回出したアプリは、公開前に

「AppBundle」と今回の件で2つの初エラーが急に来たので

めちゃくちゃ泣きそうでした・・・

そんな直前に苦しめてくれたAndroidアプリ!

play.google.com

f:id:apuridasuo:20190926114912p:plain

通常の音楽プレーヤーに、

再生楽曲のテンポをあなたの走るテンポに合わせる!

という面白機能を合わせてみました。

皆さんぜひ、ダウンロードして色々文句言ってください!

個人製作でロクに宣伝もできないので入れてみました・・・

【Android】aabファイルを実機にインストールするbatファイル作成

Androidアプリを公開する際に必ず警告される「Android App Bundle」の項目。
対応してみたのですが、
「aab」ファイルを実機にインストールする方法について、
ネットに情報が少なくまとまっていなかったので
今回、まとめようと思いました。

対応した警告の内容

f:id:apuridasuo:20190925131202p:plain
図:アプリリリース時の警告
「AndroidAppBundleでサイズを小さくしよう!」という事でした。
個人製作のアプリなので100MBも超えたことが無かったので
小さくなろうが誰も気にしないだろうと思い、無視していました。
今回暇つぶしに対応してみたのですが、ビックリしたのが
ビルドして出力されるファイルの拡張子が「.apk」ではなく「.aab」になってる!
という事でした・・・
この「.aab」ファイルを実機にインストールする方法が全く分かりませんでした!
ネットで調べても、細かい部分は載っているのですが
初歩的な部分が全くなかったので素人には四苦八苦状態でした。
苦しみながらbatファイルを作って一発インストールできるまでいったので、
同じ様に困っている方がいましたら是非ご利用ください。

Android App Bundle」を利用して「aab」ファイル作成

これは簡単です。

f:id:apuridasuo:20190925132202p:plain
図:ビルド設定
上図のように、「Build App Bundle(Google Play)」にチェックを入れるだけです。
これで、「AndroidAppBundleでサイズを小さくしよう!」は達成です!
実機デバッグを行わない方は、できたファイルをアップすればOKです。

「aab」ファイルを実機にインストールする方法

  1. 最新の「BundleTool」をダウンロード
  2. github.com 上記URLから、最新の「 bundletool-all-○.○.○.jar 」ファイルをダウンロード
    ※○=バージョン情報
    落としてきたファイルは好きなところに置いて大丈夫です

  3. batファイルを1.のファイルと同階層に作成
  4. 落としてきた「 bundletool-all-○.○.○.jar 」と同じ階層に
    適当なファイル名で「.bat」ファイルを作成して下さい。
    batファイルに記入するコードは後ほど説明します
  5. 「.aab」ファイルを1.のファイルと同階層に移動
  6. Unityでビルドしてできた「.aab」ファイルを
    batファイル等と同階層のフォルダに移動させてください
    f:id:apuridasuo:20190925140231p:plain
    図:フォルダ構成参考例
  7. batファイルのコードを記入
  8. まずは、以下をコピペして下さい

    @echo off
    cd /d %~dp0
    @rem ↓↓必要事項を記入↓↓
    set File_Bundle=落としてきた「bundletool」のファイル名【例】bundletool-all-0.10.3
    set File_App=Unityから出力したアプリのファイル名【例】TestAppName
    set Path_Key=アプリで使っている「.keystore」ファイルのパス【例】D:/Unity/TestAppName/user.keystore
    set Pass_Key=パスワード
    set Alias=エリアス名
    set Pass_Alius=エリアスのパスワード
    @rem ↑↑必要事項を記入↑↑
    @rem ----変数設定
    set Path_Now=%~dp0
    set Path_Get=%Path_Now%%File_App%.aab
    set Path_Out=%Path_Now%%File_App%.apks
    set Path_Out_Srch=%File_App%.apks
    set File_Bndle_Fix=%File_Bundle%.jar
    @rem ----apks作成済みなら削除
    if exist %Path_Out_Srch% ( del %Path_Out%)
    @rem ----apks作成処理
    java -jar %File_Bndle_Fix% build-apks^
     --bundle=%Path_Get%^
     --output=%Path_Out%^
     --ks=%Path_Key%^
     --ks-pass=pass:%Pass_Key%^
     --ks-key-alias=%Alias%^
     --key-pass=pass:%Pass_Alius%
    @rem ----apksをインストール※USB接続している実機が対象
    java -jar %File_Bndle_Fix% install-apks^
     --apks=%Path_Out%\
    pause \
    

    次に、コードの中の、各自記入しないといけない部分があるので解説します。
    ※ コードの「@rem ↓↓必要事項を記入↓↓」の部分です

    ・set File_Bundle=
    ・set File_App=

    拡張子を除いたファイル名を記入

    f:id:apuridasuo:20190925142322p:plain
    図:記入内容

    ・set Path_Key=
    ・set Pass_Key=
    ・set Alias=
    ・set Pass_Alius=

    キーファイル(Unityの「Player Settings→Publishing Settings→Keystore」項目)
    エリアス名(Unityの「Player Settings→Publishing Settings→Key」項目)
    両パスワードを記入

    f:id:apuridasuo:20190925142831p:plain
    図:パス系記入欄記入内容
    記入例

    @rem ↓↓必要事項を記入↓↓
    set File_Bundle=bundletool-all-0.10.3
    set File_App=MusicTempoCnv
    set Path_Key=D:\Unity\CmnKey\user.keystore
    set Pass_Key=11110000
    set Alias=username
    set Pass_Alius=00001111
    @rem ↑↑必要事項を記入↑↑
    

    これで準備はOK!
    後は、AndroidをUSBに接続して作成したバッチを実行して下さい。
    apksという拡張子のファイルが作成されて、その後に実機にインストールされます。

これで、特に難しいこともなくaabファイルで
実機デバッグを行うことができます。

ただ、調べていて思ったのですが、
「bundletool」の詳細情報が無さすぎるので、
そもそも、abbファイルを手動で実機にインストールすること自体
普通は行わないのではないか?

と思ってしまいました。。。

自分が遠回りなことをしている気しかしないので、
こんな事しなくても、もっと簡単に実機デバッグできるし!
という方法があったらさわりだけでも誰か教えてください!!

【アプリ】GoogleAdmobで広告が表示されなくなった時

最近の1か月間ぐらい、

私が作成したアプリの収益が急に0円になりました。

その時の対応と解決までの道のりをご紹介します。

※.今回解決した理由はほとんど謎です!

状況(環境)

AndroidアプリにGoogleAdmob広告を導入していた

・すべてのアプリで正常に広告表示されていた

・バナー広告、インタースティシャル広告を導入

・総DL数:約700、収益:約700(円 / 日)

収益が0円になった!

f:id:apuridasuo:20190717105129p:plain

図:収益レポート

6月の15日ぐらいに、急にアプリ収益が0円になってました。

アプリを開くと、広告が表示されなくなってました。

 

この時、GoogleAdmobサイト・GooglePlayConsoleサイトを見ても

注意や警告等の表示は何もなく、アカウントは問題なく見えました。

GoogleAdmobへの問い合わせ

まず、GoogleAdmobに問い合わせを行おうと思いました。

しかし、問い合わせが分かりずらい!!

ですので、分かりやすく以下にまとめます。

f:id:apuridasuo:20190717105744p:plain

図:お問い合わせ種類

調べたところ、お問い合わせフォームは2種類ありました。

・【A】問い合わせ

https://support.google.com/admob/contact/implementation_issues_new

こちらは、普通のお問い合わせフォームになります。

だたし、たどり着くまでにメンドクサイ手順が満載でした。

上記のURLでジャンプしていただければいいのですが、

一応フォームまでの手順をまとめましたので図示しておきます。

f:id:apuridasuo:20190717110456p:plain

図:お問い合わせまでの道のり

・【B】スペシャリスト相談

モバイル スペシャリストにご相談ください - Google AdMob

こちらは、問い合わせで調べたら一発で出たので分かりやすいフォームです。

しかし、一か月間返信が来ることはありませんでした。。。

おそらく、アプリのDL数が少ないと返信が後回しになるのだと思います。

 お問い合わせ応対内容

今回、【A】【B】2種類のお問い合わせに質問を送った内容をまとめます。

・【B】スペシャリスト相談

返事なし・・・・・( ;∀;)

・【A】問い合わせ

1.広告が急に表示されなくなったことを相談した

2.返答メールが2,3日後に来た

f:id:apuridasuo:20190717110801p:plain

図:GoogleAdmobさんからの返答

3.無効なトラフィックについて確認するも、違反内容がわからず四苦八苦する

  →後日、お支払いの「ご利用履歴」を確認しても

   「無効な操作による返金」が無かったため、違反してなかったと思ってます

4.修正する点が分からないので直しようがない!

  とりあえずメール文面の「トラフィック品質の評価期間」について

  期間はどれくらいなのかメールに返信してみた。

5.返信なし。。。問い合わせフォームで質問してみた!

6.返信なし。。。諦めて放置していた。。。。

 

一か月後・・・・

 

7.気づいたら収益が0円じゃなくなっていた!

  実機で確認してみると、アプリ広告が表示されるようになっていた!

考えられる原因

 1.支払い基準額100%手前だった(98%)のでトラフィック品質の評価を行った

広告を止められる直前、総収益が支払い基準額直前の7800円でした。

よって、支払いを行っていいアカウントなのか調べるため

トラフィック品質の評価を行ったのではないかと思います。

確認期間中に支払い基準額を達成されては困るので広告表示が止められたのでは?

 

2.急に広告収益が高くなったのでトラフィック品質の評価を行った

広告を止められる直前、新しいアプリを公開したのですが、

広告収益が一日500円ぐらいアップしました。

急激に収益が上がったのでトラフィック品質の評価を行ったのではないかと思います。

 

まとめ

急に広告表示が止められたら、

トラブルシューティングからの問い合わせを行う!

よく分からなかったら一か月ぐらい放置してみる!

個人製作ですと、

細かい部分がよく分からないので待ってみるのも一つの手です(´;ω;`)

スマホアプリを無料で宣伝する方法

自作したアプリを宣伝したい。

色んなやり方はありますが、今回ご紹介するのは

スマホアプリレビューサイト」へのレビュー依頼です

 

アプリレビューサイトとは?

あなたが例えばネット検索で「アプリ 暇つぶし」などで検索したとき、

条件に対応するアプリをまとめて紹介してくれているサイトのことです。

レビューサイトに載ることで、自分の作成したアプリを

本当に必要としているユーザーに宣伝することができます。

 

大手レビューサイト-Appliv-アプリヴに依頼してみた

android.app-liv.jp

今回自作したアプリを上記サイト様に実際にレビュー依頼してみました。

料金はなんと無料でした!

素人で個人製作の私にも分かりやすく、丁寧に対応して下さったので

初心者には超おススメのサイト様だと思います。

以下に実際の依頼手順を記入していきます。

 

 ①.HPのレビュー依頼ボタンクリック

HPの一番下の項目の「アプリ開発者様へ」の部分をクリック

f:id:apuridasuo:20190617094921p:plain

図:レビュー依頼場所

②.必要事項をフォームに記入

私は個人製作でしたので、「法人名・プロモコード」の部分は記入しませんでした。

 

③.メールで何度かやり取りをする

依頼フォーム送信後、確認メール等で2回ほどやり取りをしました。

このメールのやり取りが素人の私には一番ハードルが高いなと思っていたのですが、

料金もかからない上に、とても分かりやすいメールの内容でした。

特に、こちら側がやらなければダメな事が無かったのは驚きでした!

 

④.5日間ぐらいでレビューが掲載された

依頼後、5日後ぐらいにレビューが掲載されました。

レビュー内容を確認しましたが、分かりやすく具体的な内容を掲載していただき

無料とは思えない内容で驚きでした。

※実際のレビュー内容は以下URLです。

【Appliv】パチツール パチンコ・スロット補助ツール 全国レア台設置店や全開放パスワードリストなど掲載

 

無料・かつお手軽なのでやらない理由はない!

以上がレビューサイトへの依頼手順です。

今回レビューサイトに依頼してみて思ったことは、

依頼する側にはデメリットが全くないという事です。

レビュー依頼は個人製作者はハードルが高いイメージでしたが

全くそんなことはなく、対応も驚きの丁寧さでした!

自作アプリのDL数がなかなか上がらない方はぜひ、お試しください