クソアプリ Advent Calendar なるものを見つけたので投稿してみます.
クソアプリという言い方はあまり言葉遣いはよろしくないですが,ご容赦ください.
この記事は,クソアプリ Advent Calendar 2016の2日目です.
目次
- 1 クソアプリ作成は基礎的な技術を身につけるには最適
- 2 事の発端
- 3 ルール
- 4 制作物一覧
- 4.1 1個目 あなたのエネルギー量は?
- 4.2 2個目 テストの点数何点?
- 4.3 3個目 世界のナベアツさんアプリ
- 4.4 4つめ タイマーアプリ
- 4.5 5個目 RGB確認機
- 4.6 6個目 タスク管理アプリ
- 4.7 7個目 情報収集アプリ
- 4.8 8個目 天気予報アプリ
- 4.9 9個目 エイリアンダンス
- 4.10 10個目 3目並べ Twitter VS LINE
- 4.11 11個目 私が通った道
- 4.12 12個目 私は今ここにいます
- 4.13 13個目 お年玉をください
- 4.14 14個目 音楽プレイヤー
- 4.15 15個目 天気予報その2
- 4.16 16個目 ブログリーダ
- 4.17 17個目 クソ画像送りつけ機
- 4.18 18個目 iOSでARをやってみる
- 4.19 19個目 立体物認識アプリ
- 4.20 20個目 記念地記録アプリ
- 4.21 21個目 障害物避けゲーム
- 5 最後に
クソアプリ作成は基礎的な技術を身につけるには最適
素晴らしいサービス・プロダクトって,基本的には単純なことの組み合わせなんです.
例えば,iPhoneは,素晴らしい製品です.
しかし,とてもざっくりいうと「ミュージックプレーヤー」と「電話」を組み合わせなわけです.
はてなブックマークも,「ストックする」という機能と,「コメントを残す」という機能の組み合わせです.
このように,サービス・プロダクトを作る際には,なにかを組み合わせるということがキーになってくるわけです.
つまり,その根底にあるのは基礎的な技術です.
クソアプリとは,ここでは機能が少ないため,そのアプリ単体では使えないようなアプリのことを指します.
しかし,クソアプリ作成はシンプルであるため,プログラミング技術を習得するにはもってこいなのです.
これは,私が実際にクソアプリを短期間で集中的に作ってみた記録です.
事の発端
私は,iPhoneアプリ開発のスキルが欲しかったです.
プログラミング技術を上げるもっとも手っ取り早い方法,それは実際にコードを書くことです.
しかし,1人でよくわかんないアプリを作るのも面白くないし,続かないと考えた私は,以下のようなツイートを行いました.
そう,Twitterという手を使い,誰かに監視される状況を自ら作ったのです.
その結果,わずか30分足らずで21個のいいねをいただき,わずか10日の冬休みにクソアプリを21個作ることになりました..
ルール
クソアプリチャレンジを行う前にルールを決めました.
クソアプリチャレンジの期限は10日とする
大学の冬休み期間にアプリを21個作るという宣言を行ったので,必然的に10日以内に作るというルールが出来てしまいました.
アプリデザインにはこだわらず,出来ないところは妥協
細かいところまでこだわっている余裕はありません.エラーに悩んでいる時間ももったいないので,わからないところは素早く切っていきました.
1つのアプリにかけるのは5時間まで
多くのコードを書き,Swiftプログラミングになれることを目的をしているので,多くの時間を1つのアプリに掛けることはやめました.
学習費合計3000円までしか使ってはいけない
冬休みで出費も多かったので,あまりお金は使いたくありませんでしたw
ただ,なんか教材がないと勉強が出来ないので3000円までは使って良いことにしました.
今回はオンライン学習サイトUdemy
の
「完全攻略!初級者からプロになるためのiOS 9アプリ開発のすべて」※当時2500円
という動画教材を購入しました.
この動画教材は,安いかつとても丁寧と最高だったので,本当におすすめです.
他に図書館でアプリ開発の本を借りたりもしました.
作ったものはすべてTwitterにアップし,GitHubで公開する
Twitterで始めたことなので,フォロワーさんにしっかりやってることをアピールしていきます.
作ったアプリに「いいね!」をしてもらうことにより,モチベーションを保つことにもつながりました.
学んだこと,得たことは記録に取る
プログラミングって,やらないとすぐに学んだことを忘れてしまうので,軽くブログなどに記録をとっておくことにしました.
この6つのルールを行う前に決めました.
制作物一覧
10日間で作成したアプリたちを紹介します.
(注意)GitHubで公開しているソースコードはSwift2を使用しています.勉強なさる際,Swift3への読み替えを行ってください.
1個目 あなたのエネルギー量は?
体重を入力すると,アインシュタインの特殊相対性理論からその人の持っているエネルギーを求めて,原発何基分が一年に作るエネルギー量かを計算するアプリです.
iPhoneアプリ開発時に,文字を表示するためのUILabel,そしてユーザがタップすることが可能なUIButtonの使い方について学びました.
また,Swiftでの四則計算,型変換の方法,ボタンやラベルとソースコードを関連付ける方法についての知識を得ました.
ソースコードはこちら
2個目 テストの点数何点?
乱数で0〜100までの点数をアプリ起動時に生成してくれます.
そして,プレーヤーは,その生成された点数を当てていきます.
プレーヤーが入力した点数が実際の点数よりも高いか低いかが表示されるので,繰り返し入力し,できるだけ少ない回数で点数を当てるゲームです.
if文,while文,for文などの基本的な構文を学びました.
基本的な構文については,他の言語とあまり変わらなかったので,それほど苦労はしませんでした.
UITextFieldを使って入力を受け取る方法や,アンラップについて理解しました.
ソースコードはこちら
3個目 世界のナベアツさんアプリ
一昔前にブレイクした芸人,世界のナベアツさんを覚えているでしょうか?
ボタンを押すとカウントが上がって,「3の倍数もしくは3の付く数字の時にアホになり,5の倍数もしくは5の付く数字の時に世界のナベアツさんがナルシストになる」というアプリです.
UIImageViewを使用して画像を表示する方法,UIImageクラスから画像のインスタンスを作成することが出来ること,constraintで画面サイズに依存せずにきれいにレイアウトをする方法を学びました.
ソースコードはこちら
4つめ タイマーアプリ
5分間で発表をする,LT(ライトニングトーク)専用のタイマーアプリ
スタート,リセット,ポーズ機能がついています.
残り時間が少なくなると,真ん中のイラストがどんどん小さくなっていきます.
時間が来ると,別のイラストへと切り替わります.
Timerの使い方,画像の拡大縮小を行う方法,ナビゲーションバーについて,バーにボタンを設置する方法,ボタンの見た目を変更する方法を学びました.
ナビゲーションバーっていうのは,アプリの上部のバーのことです.
いろんなアプリで使われているもので,これが使えると作れるアプリの幅がぐっと増えてきます.
ソースコードはこちら
5個目 RGB確認機
RGB値を視覚的に確認することが出来るアプリです.
一番上に,スライドバーがあり,それを調整することによって,RGBを指定できます.
指定した色と少しずれた色も同時に表示してあげることにより,色の細かな違いを確認することが出来ます.
SlideBarの使い方について学びました.また,TableViewと呼ばれる,一覧表示ができるUIパーツを使いました.
TableViewを使い時に,DelegateやProtocolについても学習しました.
ソースコードはこちら
6個目 タスク管理アプリ
iPhoneアプリ初心者が作る定番のタスク管理アプリです.
クソアプリ 06/21 ToDoアプリ
アプリ系に手を出したら絶対作るToDoリストアプリ。画面遷移とかデータの記憶とかできるようになった。タスク登録とスワイプでの削除できる。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/ITyV8LmXgV
— Я@06/21達成 (@yuki_99_s) 2015, 12月 29
2画面で構成されていて,タスクリスト表示画面とタスク新規追加画面からできています.
完了したタスクはスワイプで削除することができます.
NSUserDefaultを使って,データを保存しておく方法を学びました.
これにより,アプリを終了しても消えないデータを扱えるようになりました.
また,今までは1画面によって構成されているアプリばっかりだったのですが,セグエを使うことにより,2つの画面を行き来するアプリを作れるようになりました.
ソースコードはこちら
7個目 情報収集アプリ
GithubとQiita,はてなブックマークが一括でみれるアプリです.
今回はWebコンテンツを扱ってみたかったので,3サイトが切り替えてみれるサイトを作りました.
クソアプリ 07/21 Webコンテンツ表示
Webコンテンツ使ってみた
GithubとQiita,はてなブックマークが一括でみれるアプリ.
登録できるサイトは変更可能.
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/qblLb1xJxp
— Я@07/21達成 (@yuki_99_s) 2015, 12月 29
Webコンテンツを表示する方法について学びました.デフォルトでは,httpは拒否されて,httpsだけしか許可しない設定になっているので,info.plistをいじって上げる必要があります.
Webサイトをアプリ内で表示できるということは,ブラウザを作ることができますね.
ソースコードはこちら
8個目 天気予報アプリ
入力した地域の天気を見ることが出来るアプリになります.
この写真では,「Uji」と地域を指定しています.
結果は,ただ天気予報サイトから撮ってきた情報を表示しているだけです.
これは,内部では,入力された地域に対応した天気予報ページのURLを生成する処理を書いています.
例えば,Ujiと入力されたら,http://天気予報のサイト/uji
といったようなURLを生成して呼び出しているわけです.
その為,UJIと入力されても,ujiと入力されても,Ujiと入力されても対応できるように,すべて一旦小文字に変換する処理を噛ませました.
入力された文字を切り抜いたり,大文字小文字に変換したりする文字列処理について学ぶことが出来ました.
ソースコードはこちら
9個目 エイリアンダンス
エイリアンがくるくる踊るだけのアプリです.
そろそろネタ切れになってきました.
クソアプリ 09/21 エイリアンダンス
これはひどいw ごめんなさい、そろそろネタ切れ…
いや、なんとしてでも21個作ります。
アニメーションの練習アプリ…(震え声)
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/ldmvnX4pIY
— Я@09/21達成 (@yuki_99_s) 2015, 12月 30
アニメーションはなかなか使い所も多いと思います.
スタートとストップボタンもついてますが,それはタイマーアプリの知識を使って実装することが出来ました.
viewDidLayoutSubviewsメソッドや,viewDidAppearメソッドに関することも学びました.
ソースコードはこちら
10個目 3目並べ Twitter VS LINE
2人でプレイできる3目並べです.TwitterもしくはLINEを3つ並べたほうが勝ちです.
クソアプリ 10/21 Twitter VS LINE
三目並べというやつをTwitterとLINEにしてみた。
二人で対戦して、先に三つ並べた方が勝ちです。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/lTAYEZ5m3D
— Я@09/21達成 (@yuki_99_s) 2015, 12月 31
Vimとemacsとか,きのこの山とたけのこの里にしようかとか迷いましたが,TwitterとLINEになりました.
今回は,ほとんど1〜9個目のクソアプリの知識で出来ました.
コードをきれいにするために,Tagという機能を使い,コードの共通化を図りました.
例えば,プログラムでボタンにTagをつけておけば,ボタンがタップされた時にどのボタンがタップされたかをTagを使って判定できるというわけです.
ソースコードはこちら
11個目 私が通った道
私の居場所をリアルタイムで地図にマッピングするアプリです.(アプリを閉じてるときは動きません)
クソアプリ 11/21 Яくんストーキングアプリ
2015年中に半分突破した。携帯の持ち主の居場所をリアルタイムマッピングしていくアプリ。来年のストーカー募集中。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/xkedNJzUKm
— Я@12/21達成 (@yuki_99_s) 2015, 12月 31
iPhoneアプリ開発で地図関係を使うときの手順について学びました.
MapKit,Core Location Frameworksを使いました.その周辺の地図を表示する方法,ピンを立てる方法などを学びました.ピンを立てる際には,メモなどを残しておくことも可能です.
ソースコードはこちら
12個目 私は今ここにいます
11個目で地図アプリを作ったので,もっと遊んでみました.
ユーザの状況をお知らせするアプリです.
移動速度まで測れます.
緯度・経度をもとにして住所を探索する方法,逆に住所から緯度・経度を求める方法,そして移動速度や方位,高度などを求める方法を学びました.
locationManagerメソッドを使うと,本当に簡単に移動速度や方位などをとれます.
せっかくiPhoneには優秀なセンサが数多くついているので,使わないと損ですね.
ソースコードはこちら
13個目 お年玉をください
1回シェイクすると,10000円以下のお金がランダムがもらえるが,3%の確率で死んでしまうゲームです.
死んでしまう前に,「やめておく」ボタンを押す必要があります.
死んでしまうと0円という扱いで,以下に多くのお年玉をもらうかというゲームです.
クソアプリ 13/21 お年玉をくれ
シェイクすれば10000円以下がもらえるけど3%の確率で死ぬ。たまに確変が起こる。
死ぬ前にやめておこう。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/gZbcL8ViAI
— Я@12/21達成 (@yuki_99_s) 2016, 1月 2
たまに死ぬ確率が2倍になったり,もらえるお金が2倍になったりする確変もあります.
シェイク・スワイプに反応する方法や,効果音の出し方を学びました.
加速度センサを用いて,シェイクに反応させてみました.
ただボタンをタップするだけではなく,シェイクという動作によってお年玉をもらえるというシステム,面白いかなって思いました.
ソースコードはこちら
14個目 音楽プレイヤー
13個目のアプリで,効果音を出すことが結構簡単にできたので
次は音楽プレイヤーを作ってみることにしました.
クソアプリ 14/21 音楽プレーヤ
こなつくん(@Konatsu598)が25曲作曲中なのでそれ用音楽プレーヤアプリ作った
シャッフル、音量、スクラブ再生などの機能あり
⚠️音量注意
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/tvM87mWw8G
— Я@14/21達成 (@yuki_99_s) 2016, 1月 2
タイマーアプリの知識も使って,スタート,ポーズ,巻き戻し,スクラブ再生なども出来るようにしました.
シャッフル再生にも対応しております.
再生できる音楽は,すべてこなつくんの曲.
こなつくん… 彼もまた,冬休みにいいねきた数だけ作曲をするなどという無謀なことにチャレンジした方です.
#いいねされた数だけ冬休み中に曲を作る
0/25
ここにリンク張ります
タイトルやジャンルは適当
ルール↓
①1曲当たりの時間は最低30秒
②1/6までに25曲アップロード出来ればok
③最悪過去作うpも許可
④ミキシング・マスタリングは重視しない
⑤使う楽器、ジャンルの指定なし
— こなつ@5/25曲達成 (@Konatsu598) 2015, 12月 28
音楽の再生は,割りと簡単にできました.
しかし,音楽再生時には,try〜catch構文を使って,音楽の再生に失敗したときなどのエラーを考えなければいけませんでした.
そのため,ちょうどいい機会なので,Swiftの例外処理についても学びました.
ソースコードはこちら
15個目 天気予報その2
天気予報アプリその2です.
8個目のアプリでも,天気予報を作っているのですが,あの天気予報アプリは,既存の天気予報サイトを貼り付けただけでした.
そこで,今回はWebサイトから必要な情報だけを取ってきて表示してあげる形式に変えることにしました.
必要な情報だけを取ってきているので,8個目で作った天気予報アプリよりもシンプルになっています.
Webページから情報を選定して取得するために,WebページのHTMLを切り出す,スクレイピングという技術について学びました.
エンコード・デコード処理,そして取得したHTMLから要素を抽出する方法について学びました.
地図アプリの知識を活かして,自分が今いる場所の天気を自動で取得する処理も書いたりしました.
ソースコードはこちら
16個目 ブログリーダ
ブログを読むことが出来るブログリーダーアプリを作りました.
クソアプリ 16/21 ブログリーダ
GoogleのAPIを使ってブログデータをJSONで取得。タイトルと内容をみれるブログリーダー
オフラインでも記事が読めるようにCoreData使用。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/tzWYzFojwa
— Я@16/21達成 (@yuki_99_s) 2016, 1月 4
GoogleのAPIを使用して,JSON形式でブログタイトルや記事を取得します.
そして,CoreData(データベース)を使ってデータを保存したので,一旦読み込んでおけば,ブログ記事をオフラインで読めることが出来るようにしました.
CoreDataの本当に基礎的な使い方を学びました.
iOSでデータを保存する際,6個目のタスク管理アプリで使った,NSUserDefaultを使うこともあるのですが,大規模なデータはNSUserDefaultでは扱えません.
そこで,CoreDataを使う,もしくはNiftyCloudMobileBackendなどのMBaaSを使う必要があります.
いい機会だと思い,CoreDataについてとても軽く触れました.
CoreDataは奥が深いので,触らなかった部分も多数あります.
ソースコードはこちら
17個目 クソ画像送りつけ機
知り合いが運営しているTwitterアカウントで,クレイジー(´・∀・`)bot(@kusorep_crazy)というのがあります.
そのクレイジー(´・∀・`)botへクソ画像を送りつけるためだけのアプリです.
クソアプリ 17/21 クソリプ生成機
クレイジー(´・∀・`)bot(@kusorep_crazy)へクソ画像を送りつけるためだけのアプリ。カメラ接続とかTwitter連携使ってみた。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/2Pdz5087dK
— Я@20/21達成 (@yuki_99_s) 2016, 1月 4
iOSのカメラ・アルバム機能及びTwitterへの投稿機能を使ってみたかったので作成したアプリです.
カメラを使ってアプリ内で写真を撮る方法,及びカメラライブラリに保存されている写真を使用する方法を学びました.
また,Socialフレームワークを用いて,Twitterへの投稿,Twitterログイン機能などを実装しました.
ソースコードはこちら
18個目 iOSでARをやってみる
クソアプリとは言え,これだけの量作れば,iOSアプリ開発もだいぶ慣れてきました.
そこで,AR(拡張現実)をやってみました.
クソアプリ 18/21 iOSでVR
バーチャルリアリティ!流石に時間ないのでほぼサンプルをビルドしてVR環境作ってテストしただけですが…
かなり認識精度も高め。このやかんはVRで有名
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/RguXpChXC3
— Я@20/21達成 (@yuki_99_s) 2016, 1月 4
Appleの3DフレームワークSceneKitと,VuforiaというAR向けモバイルビジョンプラットフォームを使用して作りました.
ARということで,シミュレータでは起動できず,実機を使わないとビルドすら通りません.
なんかすごいことやってるように見えますが,圧倒的時間不足に付き,ほとんどサンプルを動かしただけです.
参考リンク: Xcode + vuforiaでARアプリを動かしてみる – しめ鯖日記
19個目 立体物認識アプリ
18個目で使用したVuforiaは,立体的なARマーカも検出できるということで,物体を検知し,その周辺にラーメンどんぶりを表示させてみました.
クソアプリ 19/21 立体物認識
立体物の認識もできるんですな。立方体のマーカーを認識させて、外形線引いてその周りにラーメンどんぶりを回転させてみるやつ。これもほぼサンプルです…
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/QYauiwBs6f
— Я@20/21達成 (@yuki_99_s) 2016, 1月 4
Vuforiaのリファレンスをみながらチマチマと作業した結果,良い感じになりました.
参考リンク: SceneKit + Vuforia でARアプリを作ろう – Qiita
20個目 記念地記録アプリ
21個のクソアプリチャレンジも終盤ということで,それなりにしっかりしたものを作ってみました.
今まで行ってよかった場所などを記録しておくことが出来るアプリです.
クソアプリ 20/21 記念地
行ってよかった場所を保存しておけるアプリ。長押しでピンを立てて場所を保存しておける。とりあえずのところ一言コメントと住所が保存できるようになってる。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/C3V1sbUC1P
— Я@20/21達成 (@yuki_99_s) 2016, 1月 5
MapKitの知識,そして場所やコメントを保存するためにNSUserDefaultの知識を使って作りました.
また,複数ページからなるアプリのため,セグエも使いました.
今まで学んできたいろいろな知識を統合して作りました.
これくらいになると,デザインや機能面でのブラッシュアップをかければリリース出来るレベルにも持っていけそうです.
ソースコードはこちら
21個目 障害物避けゲーム
ラストは,ゲーム作成にチャレンジしました.
許可を頂いたフォロワーの皆さんのアイコンを拝借し,障害物避けゲームを作成しました.
Flappy Birdのようなゲームを目指しました.
クソアプリ 21/21 フォロワーを避けるお嬢
Sprite Kitでゲームです。
羽の生えたお嬢(@ottosan884 )が障害物(フォロワー)をよけていくゲーム。音はこなつくんの。
#いいねきた分だけ冬休みにクソアプリを作る pic.twitter.com/WHZfxn5fP9
— Я@21/21達成 (@yuki_99_s) 2016, 1月 5
BGMには14個目の音楽プレイヤーのところで紹介したこなつくんの音楽を使用しています.
SpriteKitを使用してゲームを作りました.
ゲームづくり自体が始めてなので,かなり多くを調べながらやりました.
記念すべき21個クソアプリチャレンジのラストなので,結構頑張って作りました.
SpriteKitの使い方,アニメーションの仕方,重力のかけ方,衝突判定やスコアの付け方など,様々なことを学びました.
ソースコードはこちら
最後に
こんな長文記事を読んでいただきありがとうございました.
見ての通り,はじめはXcodeの使い方もよくわからず,iPhoneアプリなんて全く作ったことなかった私が,たった10日でかなりスキルを上げることが出来ました.
クソアプリでも,作ったものをTwitterなどで公開することによってフィードバックを得られ,モチベーションも維持されます.
黙々と本を読んで勉強するってめちゃめちゃ難しいので,お時間がある方はやってみるのも面白いと思います.
このクソアプリチャレンジを行ってから約11ヶ月,今ではiPhoneアプリの作り方を教えるメンターとしても活動しています.
また,このクソアプリチャレンジで学んだことを使って,実際にアプリリリースも行っています.
クソアプリチャレンジの目的は,クソアプリ作成を通して,基礎的なスキルを楽しく学ぶことでした.
最終的にその基礎スキルの組み合わせでアプリリリースまで行けることを考えると,決して無駄な行動ではなかったと思います.
みなさんも,挑戦してみてはいかがでしょうか.