アイアンマンになりたい

アイアンマンになりたい

35歳、2児の父。将来の夢「アイアンマン」

AppleWatchの文字盤に和暦を表示するアプリ「和暦Watch」のバージョン1.3をリリースしました。

f:id:ultimate-ez:20170603070639j:plain 毎日コーディング生活の一貫として、Apple Watchの文字盤の情報表示エリア(コンプリケーション)に和暦を表示するアプリ「和暦Watch」のアップデートを行いました。

和暦Watchを App Store で

アップデートの内容は、前バージョンで追加した「曜日」「干支」の表示/非表示の切り替え機能の更新処理の効率化と、日付が表示される文字盤(モジュラー、ユーティリティ)での日付更新処理の効率化です。

個人でアプリを作る時に意識している2つのこと

個人でアプリを作るうえで絶対のルールとして自分に課していることが2つあります。

1つは自分自身がそのアプリの一番のユーザーであること
アプリをリリースした後も、自分がヘビーユーザーとして使っていくことで、不具合の発見や欲しい追加機能を考えやすくなるので、自分が使わないアプリは作らないようにしています。

「和暦Watch」も、私自身がよく「あれ、いま平成何年だっけ?」と悩むことが多かったので文字盤に「平成○年」と表示するだけのアプリを作ろうと開発しました。

もう1つは今まで使ったことのない技術や知識を必ず1つは使うこと
仕事としてアプリ開発をするのであれば、確実に機能が実現できる「知っていること」「出来ること」を組み合わせてアプリを作るべきだと思いますが、逆に個人の場合は「今は知らないこと」「今はできないこと」を使いたいと思っています。
そうやっていけば自然と「知っていること」「出来ること」が増えていき、アプリ開発者としてのスキルが上がっていくはずです。「知っていること」「出来ること」が増えるので仕事としてやれることの幅も広がっていくわけです。

「今は知らないこと」「今はできないこと」を使ってアプリを作ると大変なことが多いけど…

「和暦Watch」の場合は、Apple Watchアプリ自体はすでにいくつか作ったことがありましたが、「コンプリケーション」に対応したアプリが初めての経験でした。
今回のアップデートはバージョン1.3ですが、1.0では「iPhoneの設定からコンプリケーションが設定できない」という問題、1.1では「曜日・干支の表示設定が反映されない」、1.2では「日付が更新されない」と数々の不具合が…。
コンプリケーションは通常のアプリとは違う独自の設定やテクニックが必要だったんですが、それがわからずになかなかまともな完成度のアプリが作れずに苦労しました。
(実際、「素人さんが作ったアプリなのかな」というコメントの☆1レビューがついたりして、心が折れかかりました…。)

でも、そうやってアプリの作り方のマズい点を不具合として報告してもらえるというのは、アプリ開発のスキルを上げるためにはかなり貴重な経験。
ストアへの公開を積極的にやったからこそ得られたものでもあるわけです。

ユーザーさんから上がってきた不具合を潰すというのは、突貫で技術力を上げ、アプリに関する理解度も上げる必要があるので、成長スピードは格段に早くなります。

「いつかアプリをストアで公開したい!」と思っている人は、完成度が低くてもいいのですぐにストアに公開した方がいいと思いますよ!

というわけで、これからも「今はしらないこと」「今はできないこと」を「知っていること」「出来ること」に変えながらアプリ開発とストアへの公開を続けていこうと思います!

松井証券の「投信工房」で毎日500円積立の記録― 1ヶ月目(2017年5月)の記録

松井証券のロボアドバイザー「投信工房」で、毎日500円積立を実行中です。

ironman.hatenadiary.com

5月10日に積立をスタートしたのでまだ20日ほどですが、毎月1日に1ヶ月の実績を記録していこうと思います。

上記の記事にも書きましたが、基本的にロボアドバイザーの提案したポートフォーリオをそのまま運用するという方針でやっているので、自分でポートフォーリオをカスタマイズしたり、ちょこちょことリバランスしたりせずに放置プレイで運用しています。
その結果、資産がどういう推移をしていくか?
「投信工房」のロボアドバイザーの精度が気になる人は是非参考にしていただければと思います!

5月31日時点のポートフォーリオ

f:id:ultimate-ez:20170601073627j:plain

5月10日に積立をスタートして、毎営業日に500円積立が行われています。
5月31日現在では12回の買い付けで6000円分が積み立てられています。

500円が最低買い付け単価ということで、ポートフォーリオの比率に近づくように500円づつ各銘柄が購入されています。
目標比率が一番大きい「先進国債券(37%)」をまずは買い付け、次に2番めに多い「先進国株式(13%)」と順番に買い付けが行われ、5月31日時点では目標の9銘柄のうち5銘柄まで保有出来ています。
目標比率が5%の銘柄「新興国債権」「国内リート」「海外リート」「コモディティ」の4つはまだ積立が出来ていません。
やはり500円の積立だと、なかなか目標のポートフォーリオが実現しませんね…。

評価損益は28円のプラス。
正直1ヶ月目なのでどうということもないですが、年率に換算したパフォーマンス実績は5.7%ということでまずまずの運用ができているようです。

わかっていたことですが「債権」はリターンが少ないのでもう少しリスク上げてもリターンに期待できるバランスにしたいなーという気持ちも湧いてきますが、放置プレイでの運用が目的なので、6月もロボアドバイザーのアドバイスそのままの現在のポートフォーリオで積立を続けていこうと思います。

「投信工房」で毎日500円積立1ヶ月目の資産記録

  • 資産総額:6,028円
  • 積立額:6,000円
  • 評価損益:28円
  • 損益率:+0.47%

Apple Developer Programメンバーシップ剥奪の危機!?原因はついやってしまいがちなアレでした…。

ソフトもハードもイケるスーパーエンジニアであるアイアンマン(=トニー・スターク)を目指すべく、毎日コーディング生活を続けている私ですが、実は早速危機に直面していました。

ironman.hatenadiary.com

コーディングの中心はiPhoneやAppleWatch向けのアプリの開発。
新しいアプリのリリース+過去に作ったアプリのアップデートを並行で進めていて、今月半ばには早速アプリのアップデートを実施しました。

ironman.hatenadiary.com

続けてまた別のAppleWatch向けアプリのアップデートを行おうとAppStoreへの申請をしたまでは良かったんですが、審査の結果アプリはリジェクト…。
アプリがリジェクトされること自体はよくあるのですが、今回はなんとも恐ろしい文章が添えられていました。。。

AppStoreへ申請したアプリがリジェクト!?何やら"不正”を疑われているらしい

Appleから送付されたメッセージはこんな文章。

We have determined that your Apple Developer Program membership, or another membership associated with your developer account, has been used for dishonest or fraudulent activity. This is prohibited by Section 3.2(f) of the Apple Developer Program License Agreement:

あなたのアカウント(Apple Developer Programメンバーシップ、または開発者アカウントに紐付いたメンバーシップ)は不正(dishonest)または詐欺(fraudulent)の活動に利用されています。これはApple Developer Program License Agreementのセクション3.2(f)で禁止されています。

As a result of this activity, you are no longer able to submit updates.

不正により、あなたはアプリのアップデートを登録することはできません。

Continuing to engage in dishonest or fraudulent acts may result in the removal of your apps from the App Store and termination of your Apple Developer Program membership and all associated memberships.

不正が続く場合、あなたのアプリはAppStoreから削除され、Apple Developer Programメンバーシップおよび全ての関連するメンバーシップは停止されます。

怖ッ!!

不正なんてやった覚えがない私は脊髄反射で、「I have no idea about “dishonest or fraudulent activity”.(不正または詐欺行為なんて身に覚えがないんですけどォ〜)」「Can you tell me more specifically what is the problem?(何が問題がもうちょいちゃんと教えて!)」と、雑に返信してしまいました。

Apple Developer Program License Agreementの指定箇所を読んでみると、…見に覚えありました…。

とは言え、メンバーシップ剥奪と結構強いアクションが匂わされていたので、気になって他のことが手につきません。
メッセージで引用されていたApple Developer Program License Agreementのセクション3.2(f)の内容をもう一度確認してみると、、、

“You will not, directly or indirectly, commit any act intended to interfere with the Apple Software or Services, the intent of this Agreement, or Apple’s business practices including, but not limited to, taking actions that may hinder the performance or intended use of the App Store, B2B Program, or the Program.”

要するに、Appleのソフトウェアやサービスを妨害する行為はダメってこと。
やはり全く見に覚えがありません。

ということで、Apple Developer Program License Agreementの現物をチェックしてみます。

http://adcdownload.apple.com/Documentation/License_Agreements__Apple_Developer_Program/Apple_Developer_Program_License_Agreement_20170227.pdf

(f) You will not, directly or indirectly, commit any act intended to interfere with the Apple Software or Services, the intent of this Agreement, or Apple’s business practices including, but not limited to, taking actions that may hinder the performance or intended use of the App Store, B2B Program, or the Program (e.g., submitting fraudulent reviews of Your own Application or any third party application, choosing a name for Your Application that is substantially similar to the name of a third party application in order to create consumer confusion, or squatting on application names to prevent legitimate third party use);

内容はメッセージで引用されていたものと同じですが、(e.g.,以降に具体例が。

submitting fraudulent reviews of Your own Application or any third party application,

あなた自身のアプリ、または第三者のアプリに不正なレビューを提出する。

あ…。

はい。私先日リリースした「DJ Beats」っていうアプリに自作自演レビュー(☆5)してました。
これがNG行為だったようです…。
おぉ…これは完全に私に非があるパターン…。

Apple様へ秒速で謝罪。そして無事にお許しをいただきました。

秒速でApple様への返信を書きました。。

「I’m very very sorry, I understood my dishonest activity.(ほんとにほんとにごめんなさい。自分の不正行為を理解しました。」
「I submitted a review comment for my own app.I already deleted the review comment.(自分のアプリにレビュー書きました。でももう消しました。)」
「Can I submit my apps again?(もう一回アプリ申請してもいいですか?)」
と、手の平クルーで。

Apple様からは約24時間後に「お前が言ってることはわかった。お前の全アプリで不正がないか調査するから待ってろ」との返信が。
そして、さらにそこから6日後「レビューをしてやろう」とのメッセージが届き、リジェクトされていたアプリは「レビュー待ち」のステータスへ。

さらに2日後にレビューは無事に完了!
アップデートをAppStoreへリリースすることができました。

良かった。。。

というわけで、AppStoreにアプリを載せている皆さん、自作自演レビューはApple Developer Programメンバーシップ剥奪の恐れすらある重大な罪
今回は悪意が無いと判断してもらえたのか、特にペナルティーはなくアプリの申請ができるようになりましたが、なんだかんだで10日間以上のタイムロスにはなっています。
自作自演レビューは絶対にやっちゃいけないよ!というのは是非覚えておきましょう!

それにしても、いやー、いい勉強になりました…。

Githubで自分にアサインされたIssueをTodoistに追加する方法

今まで使っていたタスク管理サービス「Wunderlist」がいよいよサービス終了に向かっているということで、代替のサービスをいろいろと検討した結果「Todoist」というサービスを使うことにしました。

参考↓ applewatchjournal.net

そして、これを機に「タスク管理」を徹底的に極めて、超生産的な人間になろうと思っています!

そのために「Todoist」にタスクが集約される仕組みづくりからはじめます。
まずはGitHubで自分にアサインされたIssueをTodoistにタスクとして追加することにしました。

GitHubのアカウントを有料プランに変更!毎日コーディング生活を始めます! - アイアンマンになりたい

GitHubで自分にアサインされたIssueをTodoistに追加する手順

連携に使うのはIFTTTというサービス。 複数のWebサービスを連携させるサービスで、例えばブログが更新されたら自動的にTwitterFacebookに投稿するといった使い方をしている人も多いと思います。
ifttt.com

GitHub、TodoistともにIFTTTとの連携ができるサービスなので、あとはこのサービスを接続するだけ。
しかも、基本的な連携のレシピはすでに用意されています。
ifttt.com

この画面からGitHub Issues assigned to me Todoist(自分にアサインされたIssueをTodoistのタスクにする)」をクリック。
f:id:ultimate-ez:20170527073214j:plain

レシピが表示されるので「Turn On」をクリックして連携を開始します。
GitHub、Todoistの両サービスでアカウントの認証が必要)
f:id:ultimate-ez:20170527074006j:plain

設定(Configure)画面から、Todoistのどのプロジェクトにタスクを追加するかを選択して「Save」を押せば連携完了です。
(私はとりあえずInboxにタスクを追加することにしました。GitHub専用のプロジェクトを用意するのもいいかもしれませんが、まずは全てのタスクがInboxに入って、それをマニュアルで振り分けるというフローにしてみました。)
f:id:ultimate-ez:20170527075142j:plain

ちなみに用意されているタスクは他に以下のものがあります。
* プルリクエストをTodoistのタスクにする(GitHub Pull Request to Todoist Task)
* GitHubのIssue(自分にアサインされたもの以外も含む)をTodoistのタスクにする(GitHub issue to Todoist)

実際にどういう風にタスクが追加されるの?

連携が完了したので、テストを兼ねてIssueを発行してみましょう。

とりあえず、こんな感じでIssueを作ってみました。
本文には参考サイトのURLを貼り付け、自分にアサインしています。 f:id:ultimate-ez:20170527075640j:plain

「Submit new Issue」を押すとIssueが発行されますが、Todoistとの連携はIFTTTというサービスが発動するまで少し時間がかかります。
即時連携というよりはいつの間にか自動的に連携しているくらいの気持ちでいたほうがよいと思います。

IFTTTが発動すると以下のようにTodoistにタスクが追加されます。
項目の横のlinkGitHubの対象ページのリンクになっているので便利ですね。 f:id:ultimate-ez:20170527080031j:plain

Issueの本文はメモの形でインポートされます。 ただしURLがリンクとして機能するのは1つだけ、複数のリンクを記載していても、最初の1つ以外は単なるテキストとして保存されます。
f:id:ultimate-ez:20170527080529j:plain
▲メモの一番下にある画像(「10」の数字の画像)がリンクになっています。

以上、Githubで自分にアサインされたIssueをTodoistに追加する方法でした。
Todoistで自分の抱えているタスクを一括で管理したいという人は是非参考にしてみてください!

松井証券の「投信工房」で毎日500円積立の記録#1 500円積立だとポートフォーリオに近づくのに結構時間がかかりそう…

松井証券のロボアドバイザー「投信工房」で、毎日500円積立を実行中です。

ironman.hatenadiary.com

上記の記事のとおり5月10日に積立をスタートしましたが、投信工房の積立は毎営業日なので、今日までに7回=3,500円分の積立が行われています。
※正式には毎営業日に積立資金の500円がストックされ、その後に実際の買い付けが走るという動きのため、現在投資済み2,500円+現金資産1,000円という内訳になっています。

1銘柄の買い付け最小額は500円!少しづつポートフォーリオに近づくように投資が進みます

ポートフォーリオを組んで投資を進めていますが、今のところ実際の投資結果と目標ポートフォーリオには大きな乖離があります。

というのも、投信工房では1銘柄の買い付け最小額が500円。
初日の投資額である500円が、ポートフォーリオを構成する各銘柄に振り分けられるのではなく、一番比率が多い銘柄1つだけが500円分購入されます。
f:id:ultimate-ez:20170521230158j:plain
▲買い付け初日の管理画面。目標で最大比率の銘柄「先進国債券」に500円の全額が振り分けられている。

その翌日も同様に買い付けが入るのは1銘柄。
毎日1銘柄づつ買い付けが行われ、少しづつポートフォーリオに近づいていくようです。
f:id:ultimate-ez:20170521230611j:plain
▲4日目の管理画面。3日連続で「先進国債券」が購入され、ようやく2番めの比率の「先進国株式」が購入されました。ちなみに評価額は1円ですがマイナス!!いや、もちろんこの時点での損益には全く意味がないんでいいんですけど…

私のポートフォーリオは細かく9銘柄に分かれているので、まだすべての銘柄がかいつけられてすらいません。。
f:id:ultimate-ez:20170521230457j:plain
▲本日時点の管理画面。ようやく3種目の銘柄「国内株式」の買い付けへ!一番比率が小さい銘柄は5%(=1/20)なので、とりあえず20回の買い付けで一通り全銘柄が揃うのかな…?

もちろん、銘柄を絞ればポートフォーリオに近づくペースは早まると思いますが、今回はロボアドバイザーの提案に完全乗っかり投資がコンセプトなので、時間はかかってもこのまま進めたいと思います。
理想のバランスに落ち着くまでに一体どのくらい時間がかかるのか…?これもまた、実験です。

というわけで松井証券のロボアドバイザー「投信工房」で毎日500円積立の記録第1回はこんな感じ。
基本的に放置の投資なのでそんなにネタも無いかもしれませんが、今後も2週間〜1ヶ月のペースで記録を共有していこうと思います!
投信工房に興味のある投資初心者の方の参考になれば幸いです!

即興フリースタイルラップの練習アプリ「DJ Beats」のバージョン1.2をリリースしました。

f:id:ultimate-ez:20170513000325j:plain

毎日コーディング生活の最初の成果として、約1年くらい前に作ったアプリ「DJ Beats」のアップデートを行いました。
即興フリースタイルラップの練習アプリという超ニッチなアプリです。

DJ Beatsを App Store で

アプリの制作時間は約30分。こういうアプリを量産していきたい!

「DJ Beats」は、約1年前に世間で「フリースタイルダンジョン」が流行っていたことに乗っかって作ったアプリです。
アイコンのデザインやAutoLayoutでの画面制作にはちょっと苦労したものの、機能自体はサクッと30分くらいで作りました。

再生するトラック(インストの音楽)は、Youtubeにアップされているものを集めたもの。Youtubeの動画IDをリストとして持っており、リストの中からランダムに1曲が再生されます。
Youtubeの制御はライブラリが公開されているので、基本的にはライブラリが用意しているメソッドをコールするだけ。
時間がかかったことと言えば、広告の表示の部分と、動画IDのリストをJSON形式で自前のサーバーに置くようにしたことくらいです。(リストを外部ファイルにしたのは、動画の追加・削除の際にアプリのアップデートが必要なく、すぐに編集することができるように。)

今回のアップデートは、約1年の間にいくつかアプリレビューとして投稿いただいた要望の中から、ビートを巻き戻すという機能を追加しました。
これもライブラリのメソッドをコールするだけなので、サクッと実装できました。

30分で作ったアプリでもちょっとくらいなら稼ぐことはできる!

DJ Beatsは1年くらいほったらかしにしていたアプリですが、無料アプリということもあり日々少しづつインストールされ、アプリ下部に固定しているバナー広告からの収益が月に5,000円くらいあります。
副業アフィリエイトと考えるとかなり少ない額ですが、30分で作ってあとは放置ということを考えれば、この5,000円はほぼ完全なる不労所得。こういうアプリを量産できれば、運用の労力は増えずに、少しづつ毎月の収入が増えていくことになります。

素敵!

仕事の片手間でアプリを作るわけなので、今後も狙うべきはこういうアプリ、こういう戦略だと思っています。

目指すは初代iPod Shuffleみたいなアプリ

f:id:ultimate-ez:20170513003845j:plain

Appleが2005年に発表した初代iPod shuffleはかなりインパクトのある製品でした。
当時大人気だったiPodの機能を大幅に減らし、画面すらなく、基本的に端末内の楽曲をシャッフル再生するだけという、極限まで機能を減らしたiPod"でした。
ここまで引き算を極めたデバイスを見たのは初めてでしたし、ここまで引き算してもなお残るiPodらしさも凄いなーと思ったものです。

私のアプリ「DJ Beats」も機能はiPod Shuffleに負けず劣らず少ないです。
音楽を再生するアプリなのに楽曲を選択する画面は無く、ランダムで曲が再生されるだけ。操作は「曲の一時停止/再生」「次の曲(ランダム)」「今流れている音楽を最初から再生」だけしかできません。
これをあえてどんなトラックが流れてもすぐに対応して即興ラップできるように練習するためのアプリとして提示することで、機能の少なさをこのアプリの特徴に変えられたと思います。

「DJ Beats」は我ながらうまいこといったアプリですが、これを量産するのは結構たいへん。
機能を盛ることは意外と簡単ですが、減らしていくのは結構難しいんですよね…。

その代わりとことん引き算したアプリはアプリの特徴・個性を説明しやすいし、何より開発が短期間で済むので、早い段階で世の中に出すことができます。
「毎日コーディング生活」の基本理念である「Done is better than perfect(完璧を目指すよりまず終わらせろ)」にも非常にマッチします。

ということで、今後も完璧で高機能なアプリを目指すのではなく、iPod Shuffleみたいなアプリをたくさん作っていくことを目指したいと思います!

毎日コーディング生活 5月のノルマ達成状況

  • 毎月1本新アプリをリリースする:未達成
  • 毎月1回は公開済みのアプリをアップデートする: 達成
  • 毎月1つ、GitHub上でPublicレポジトリとして何かしら公開する:未達成

GitHubのアカウントを有料プランに変更!毎日コーディング生活を始めます!

f:id:ultimate-ez:20170511233122p:plain

プログラマ・エンジニアとしてのスキルを上げるべく、毎日コーディング生活を始めることにしました。

「毎日コーディング生活」とは、その名の通り毎日1行でもいいのでコードを書くという生活を続けること。
少しでも「やってる感」を味わえるように、毎日のコーディング内容はGitHubにプッシュします。
GitHubは活動量が緑色の濃さで表現される(通称、草が生える)ので、「やってる感」が視覚化され、モチベーションも維持できるはずです。

ただ、新しい分野の勉強のためにコードを写経することもあり、それをGitHubのPublicレポジトリで誰でも見れる状態で公開するのは良くないし、そもそもあんまり人に見られたくないコードも出てくるはず…。
ということで、privateのレポジトリを作れるように、GitHub課金しました。
月額7ドルでprivateレポジトリ作り放題なので、これで安心して毎日コーディング生活をおくれそうです。

github.com

Done is better than perfect! コードは積極的に公開していくつもりです

privateレポジトリが作れるようになったからといって、privateでばかり活動していては本来の目的であるスキルの向上にはつながりません。
作ったものは、積極的に公開していきたいと思います。

Facebook創立者のマーク・ザッカーバーグの名言「Done is better than perfect(完璧を目指すよりまず終わらせろ)の精神で、完璧じゃなくてもいいので、世の中に向けて公開することを重視していきたいと思います。
公開の方法はGitHub上でレポジトリをPublicにするパターンもあるし、アプリの場合はApp Store等のストアで公開するパターンもあると思います。
どんなパターンであれ、小さく作って公開し、実際に触った人の意見をフィードバックすることで改善していくというサイクルを回すことを重視したいです。

今現在、AppleWatch向けのニッチなアプリのアイデアをいくつか抱えているので、まずはそのアプリを作って公開するのが当面の目標です。
その後も、「エンドユーザー向けのアプリやサービスを作るぞ!」と考えるとアイデアが底をつきそうですが、アプリを開発する際によく使う機能なんかを「開発者向けのライブラリ」として公開していくのであれば、より小さなアイデアがいくらでも出てきそうです。

実は、すでに4つのアプリをAppStoreで公開しているので、これらのアプリのアップデートもいいネタです。
(ストアに公開するとユーザーからの評価・コメントがつくので、改善のアイデアも見つけやすいですしね!)

Masashi Ezakiの App を App Store で

まずは、

  • 毎月1本新アプリをリリースする
  • 毎月1回は公開済みのアプリをアップデートする
  • 毎月1つ、GitHub上でPublicレポジトリとして何かしら公開する

といったあたりをアウトプットの目標として、毎日コーディング生活を始めたいと思います。

がんばりまーす。