Androidアプリを2週間の独学でリリース

Androidアプリを2週間の独学でリリースした時のメモ。

背景

個人開発でちょっとしたアイデアをかたちにしたい場合、Webサービスをつくるよりもアプリ開発のほうが向いているのではないかという考えに至り、過去に何度か挫折した経験から多少の苦手意識もある中でアプリ開発の勉強をはじめました。

1週目

MacbookProを購入

7年前に購入したMacbookAirではエミュレータが起動しませんでした。以前にもアプリ開発に興味を持ってスペックの問題で見送ったことを思い出して、意を決してMacbookProを購入。メモリ16GB・SSD512GB・Corei7にカスタマイズしました。

本を購入

モチベーションを上げるためにアプリ開発者の方の本を購入して読みました。

並行して、Androidアプリ開発の本を購入してサンプルアプリなどを動かしてみました。

ほんきで学ぶAndroidアプリ開発入門 第2版 Android Studio、Android SDK 7対応

ほんきで学ぶAndroidアプリ開発入門 第2版 Android Studio、Android SDK 7対応

アプリ開発に着手

手を動かしたほうが学習が早いと思ったことと作りたいアプリのイメージがあったので、ざっくりと要件や画面イメージをノートに書き出して開発に着手しました。何度か書き直したり、やり直したりを繰り返したあと、最初のアプリで自分のつくりたいものをつくるのは難しいと判断して開発を中断しました。

2週目

本を購入

参考にしている本のRealmのバージョンが古く数時間はまってしまったため、別の本を買うことにしました。本屋でいくつか読み比べて「はじめてのAndroidプログラミング」の説明が分かりやすかったので購入しました。

はじめてのAndroidプログラミング 改訂版

はじめてのAndroidプログラミング 改訂版

アプリ開発

1週目の反省からハードルを下げて、手元の本とググって自己解決できるレベルのアプリを作ることにしました。

アプリ公開

「ほんきで学ぶAndroidアプリ開発入門」と開発者向けの公式サイトを参考に公開申請作業を進めました。公開申請後、1~2時間後に無事に公開されました。

developer.android.com

公開後

クソアプリと判断されることを心配していましたが、実際には現在まで自分以外のダウンロードはなく、クソアプリにもなれない厳しい現実に直面しました。

今後について

しばらくはこのまま現在のアプリのアップデートと、実装可能なレベルで新しいアプリの開発を続けて、Androidアプリ開発の幅を広げていきたいと思います。

Androidでスクリーンショットの作成

Androidでアプリをリリースする時にスクリーンショット2枚が必須項目だったので作成方法を調べました。

スクリーンショットの要件

スクリーンショットの撮影方法

qiita.com

参考

Androidでアプリアイコンの作成

イラレで高解像度アイコン用に512pxの正方形画像を作成して下記のリンクを参考にAndroid StudioのImage Asset Studioを使用してアプリアイコンとして各サイズに書き出しました。

Image Asset Studio を使用したアプリアイコン作成 | Android Studio

高解像度アイコンの要件

参考

ヘッダーに配置する項目

個人開発しているサービスのヘッダー改修のため、いくつかのサービスのヘッダーに配置されている項目をまとめました。

Facebook

  • サービスロゴ
  • 検索フォーム
  • プロフィール画像
  • ユーザー名
  • ホームリンク
  • フレンド
  • メッセージ
  • お知らせ
  • ヘルプ
  • 設定

Twitter

  • ホームリンク
  • モーメント
  • お知らせ
  • メッセージ
  • サービスロゴ
  • 検索フォーム
  • プロフィール画像
    • 設定
  • ツイートボタン

Github

  • サービスロゴ
  • 検索フォーム
  • Pull requests
  • Issues
  • Marketplace
  • Gist
  • お知らせ
  • 新規作成
  • プロフィール画像
    • 設定

まとめ

ベーシックなヘッダーのサンプル

Railsでいいね機能

個人開発しているサービスにいいねボタンをつけるためのメモ。

イメージ

  • 親テーブル
    • posts
    • comments
  • 子テーブル
    • likes

投稿にもコメントにも「いいね」できるようにしたい。

課題

親テーブルが複数ある時にテーブル設計をどうするか。

参考: 複数のテーブルに対して多対一で紐づくテーブルの設計アプローチ|日本橋のシステム開発会社|スパイスファクトリー株式会社

アプローチ方法

  • ポリモーフィック関連
  • 複数の関連テーブル(中間テーブル)
  • 親テーブルの作成
  • テーブルの分割

どれを選択するか。悩んだのでSQLアンチパターンを買って読みました。

SQLアンチパターン

SQLアンチパターン

合わせてmastodonも参考にしました。 mastodonでは、ポリモーフィック関連を採用しているようでした。

  create_table "notifications", id: :serial, force: :cascade do |t|
    t.integer "account_id"
    t.bigint "activity_id"
    t.string "activity_type"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "from_account_id"
    t.index ["account_id", "activity_id", "activity_type"], name: "account_activity", unique: true
    t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type"
  end

なるべくRailsに沿ってつくりたかったので、今回はmastodonを参考にPolymorphicで実装することにしました。

実装

命名については、ableを語基の後ろに付けるものと抽象名詞を使うものとがあるようでした。

参考:Rails ポリモーフィック関連の関連名の命名 - 130単位

このあと通知機能の実装も検討していて、そこでもpolymorphicを使用する可能性があったので、汎用性が高い抽象名詞を利用することにしました。

$ rails g model like activity:references{polymorphic}:index user:references
class CreateLikes < ActiveRecord::Migration[5.0]
  def change
    create_table :likes do |t|
      t.references :activity, polymorphic: true
      t.references :user, foreign_key: true

      t.timestamps
    end
  end
end
$ rake db:migrate
class Like < ActiveRecord::Base
  belongs_to :activity, polymorphic: true
  belongs_to :user

  validates :user_id, uniqueness: { scope: [:activity_type, :activity_id] }
end

class Post < ActiveRecord::Base
  has_many :likes, as: :activity
end

class Comment < ActiveRecord::Base
  has_many :likes, as: :activity
end

参考

フリーランス4年目の2017年前半振り返り

個人開発

いくつか個人開発でサービスをつくりました。最低限の機能のみですが、もやもやっとしたアイデアから機能を検討して開発を行いリリースするまでのプロセスに慣れることができました。一方で、リリースしたところである程度満足してしまい「さあどうしようか」となったところで、次のサービスの開発に移り、サービスのほとんどが自己満足で終わって使ってもらえない状態でした。その反省から、2017年の後半はプロダクトの成長方法の学習をひとつのテーマに置いてみたいと思います。

情報収集

世界を知りたい、特に先進国の現状を知りたいと思い、ヨーロッパを一周しました。街がどんなつくりか、地下鉄にどうやって乗るか、スーパーでは何が売っているかなど、気になることを見てまわりました。2017年の後半は、まだ行ったことのない日本の地方都市に行きたいと考えています。

業務委託

お世話になっている会社で週2~3日ほど常駐で開発に参加させていただいています。上長が優秀な方で、エンジニアが働きやすく開発に集中できる環境をつくっていただいています。開発に関しては、やりたいことが決まっていて、それ以降をまるっと任せていただいている状態なので、今後の課題として設計から実装まで個人レベルの底上げがあります。

その他

株式投資・仮想通貨・人工知能といった分野にも経験・研究のため取り組んでみました。株式投資は合わなかったためか、ほとんど放置している状態です。その他の2つについては、サービスを利用したりAPIを使って簡単に動くものをつくってみたりしている状態です。今後は、寄り道をしてもう少し趣味の範囲に落とし込み開発を楽しめる方法を考えてみたいと思います。