ゆっくり書くブログ

たまに更新します。iOSエンジニアを目指しています。

シンプルタスク管理アプリ『tasemo』をリリースしました

2018年の目標『アウトプット』の第一弾として、タスク管理アプリ『tasemo』をリリースしました!
リリースしたのは1/30なので1週間以上前ですが、リリースしてから嬉しかったこと・学んだことがあったのでそれを書きます。

tasemoって何?

本当にシンプルなタスク管理アプリです。やることを『Todo』に追加、終わったらタップして『Done』に移動するだけです。

  • ふとやらなきゃいけないことを思いついた
  • とりあえずやることをパッとメモしたい
  • やったかやってないかわかればいい

といったシーンで、日々の細かいタスクをパッと管理できます。

tasemo

tasemo

  • Shizuna Itoh
  • Productivity
  • Free

なんのために出したの?

一言で言うと「自分のため」なのですが、2つ主な理由があります。

1、RxSwiftとRealmを学びたかった

これがこのアプリを作ったきっかけです。
1月に「RxSwiftを本腰入れて勉強するぞ!」と思い、ドキュメントを読む・サンプルを写経するを繰り返しました。月末にはある程度わかってきたので自分でアプリを作ってみようと考えました。
この時、別で作っているアプリにローカルDBが必要となり、Realmをきちんと理解しておきたいという気持ちもありました。
なので、『この2つの技術を使って作れるアプリ』というのが第一条件でした。

2、とにかく簡単にやることをメモするアプリが欲しかった

私は普段手帳の端っこにパッと思いついたことをメモしています。「シャンプー買う」とか、「〇〇ちゃんを遊びに誘う」とかその程度のことです。 ただ毎日手帳を確認するわけではないので、そのまま放置してしまうことが多くありました。

とはいえ、今世の中に出ているタスク管理アプリたちは本当に高性能なものが多く、「手帳の端っこメモ」だけを満たしてくれるアプリは見つかりません…
じゃあメモアプリ使えば?と言われるかもしれませんが、「終わったものと終わってないものはパッと分けたい」という気持ちを満たすメモアプリも見つからず。

本当に簡単に使えるタスク管理アプリを自分で作りたい!しかもこれならRxSwiftとRealm使えるぞ!と考えました。

出してみてわかったこと

「とりあえず出してみる」のが本当に本当に大事!

主に勉強のために作ったアプリだったので、「誰かに使ってもらいたい」という気持ちは正直ほとんどありませんでした。
開発者の方から見たら、UIUXも全然工夫がないし、なんだこれは!と思われるだろうな…くらいに思っていました。

しかし、とりあえず『速くリリース・その後改善』という進め方が良いはず、と思い最低限動く段階でリリースしました。

3日後に何気なく自分のアプリ名を検索してみると、なんと!どなたかが個人で作ったアプリ紹介サイトに記事を出してくださっていました!!しかもそのタイトルが『使いやすいシンプルな付箋的タスク管理アプリ「tasemo」』でした。

自分では「まだ何にもできないし、さすがに人に言えない」と思っていたアプリを「使いやすい」「シンプル」と言ってくださる方がいたこと、それをわざわざ記事にしようと思ってくださったことが本当に嬉しかったです!(アプリ作り始めてから一番嬉しかったかもしれない)

さらに、これを見た友人たちが「便利そうだから使うね!」と連絡をくれたり、「これ使い始めた!こここうしてほしい!」と意見をくれるようになったり、後日アプリ検索サイトにも載っていたりと嬉しいことが続きました。

普段すごく優秀な社内のモバイルエンジニアの方を見て、有名な洗練されたアプリをたくさん見ています。それと比べた時に、「私がたった3日間程度で練習のために作ったアプリを使ってくれる人なんているわけない」 と決めつけていました。
しかし、出してみるとそれに価値を感じてくれる人が何人もいました。そこで少なくとも自分にとっては価値があると思ったから作ったということを思い出しました。

この経験によって、会社の先輩方が大切にされている「アウトプット」と「速」がいかに価値のあるものかを実感しました。

  • 「価値がないかも…」と悩む前にまずアウトプットしてみること
  • 完璧にしてから出すよりも、速く出すこと

この2点がとても大事だということを学ぶことができました!

補足:今後の開発

とはいえ、まだまだ改善の余地がたくさんあるアプリです。
はじめは練習用だったので、そこまで改善を考えてはいなかったのですが、使ってくださる方がいる以上はより良いものにしていきたいと今は思っています。

今後どんどんアップデートしていく予定なので、もし使ってみようかな?と思っていただけたらぜひ使っていただきたいです!
そして、直接でもコメントでもなんでもいいのでご意見いただけると本当に本当に嬉しいです…!速!で反映させていただきます!

(ちなみに、この時に学んだRealmやRxSwiftの技術的な話もいつかまとめようと思っています。)

2017年が終わりました

2017年が終わったので、今年を振り返ろうと思います。

色々思い返していたら、大きな出来事がほぼ綺麗に4Qに分かれていたので一つずつまとめてみました。

ちなみに入社してから今まで受けていた研修のことは、ペパボテックブログ『エンジニア新卒研修を受けました』に書いたので良かったら見てください。

1〜3月

卒業

入学当初は数学教師になりたいと思っていたはずが、4年たったらモバイルアプリエンジニアになっていました。
入ったのが偶然『数学・情報数理学科』という情報にも力を入れた学科だったので、プログラミングに出会うことができました。今思うと本当にこの学科に入って良かったです。
課題があまりにもできなくて友達と大学に泊まり込んだり、テスト前に数学得意な同級生にひたすら質問したのも良い思い出です…

卒業式の時は環境が変わるのがすごく怖かったり、学科やサークルのみんなと離れるのがすごく寂しかったのですが、今でもそれなりにみんな会えてるので嬉しいです。

引っ越し

大学4年間住んでいた千葉の家から今の家に引っ越しました。
千葉の家は偶然サークルの友達が3人同じアパートで、たくさん友達が遊びに来てくれたとても思い出深い家だったのですごく寂しかったです。

今の家は会社の最寄りまで5分、実家の最寄りまで10分ととても交通の便が良いです。そして駅から徒歩3分という素晴らしい立地。大学の時の家は駅徒歩30分で冬の帰り道が本当に辛かったので、毎日駅からの近さに感動しています。
今住んでいる駅にはあまり知り合いがいないので、大学の頃ほど家に人が来たりはしませんが、これからたくさん思い出ができるといいなあと思っています。

4〜6月

入社

社会人になる、ということが本当に大きな変化だと思っていたので、入社式はすごく緊張しました。会社の先輩方がすごく素敵な会を用意してくださってとても嬉しかったのを覚えています。

福岡研修

福岡では、働く上で「仲良くすること」や「まわりの人への思いやり」が大切だということを学ぶことができました。それまで、「こんな技術を身に付けたい」「こんなサービスを作りたい」という目標はたくさんあったのですが、周りとの関わり方をしっかり考えたことはありませんでした。

福岡研修でチームになり話し合いをする中で、周りの気持ちが考えられなくてうまくいかないことがたくさんありました。その時に福岡の先輩方のコミュニケーションの取り方を見ると、常に相手への配慮があり、自分に足りないものはこれだなと感じました。
私も先輩方のように、常に一緒に働いている人たちへの思いやりを忘れずにいようというのはこの研修からずっと目標にしています。

7〜9月

基礎研修

とにかく自分がどれだけエンジニアの常識を知らないかを痛感しました。不安になることもありましたが、ここで基礎的なことをたくさん知ることができて本当に良かったです。

オーストラリア

夏にメルボルンにいる友達のところへ遊びに行きました。野生のペンギンを見たり、汽車の窓枠に座ったり、たくさん楽しいことがありました。ただ、衝撃的なほど、英語が聞き取れなかったです…強制的に英語に触れられるのも海外旅行のいいところなので、来年もどこか行けるといいなあと思います。

10〜12月

OJT

初めて自分の書いたコードがサービスの一部として動いたのが本当に嬉しかったです。それと、OJTを通して今まで関わることがなかったたくさんの社員さんとお話しすることができました。「2週間しかない」と常に焦っていたのであっという間に過ぎてしまいましたが、たくさん助けていただきながらも色々な課題を解決することができ、配属後も頑張っていけるという自信になりました。

アウトプット

社内のテックMTGという主に技術的な内容で15分程度の発表をする社内のイベントで登壇をしたり、会社のブログを書いたりしました。

発表をすることにも文章を書くことにも苦手意識があったので、準備期間はかなり辛かったのですが、色々な方のスライドやブログを見たり、何度も先輩にアドバイスいただくことでなんとかどちらも完成させることができました。
やったことは大したことではないかもしれませんが、今までやりたくなくて逃げてきたことをやり遂げることができたのは良かったです。

たくさんアドバイスしていただいた先輩方、本当にありがとうございました。

2018年

今年を振り返ったので、2018年の目標を少しだけ考えようと思います。

アプリエンジニアになる

2017年、個人的に出そうとしていたアプリいくつかがついにリリースできずに終わってしまったので、来年は必ずリリースします。
ぴよぴよは昨日またリジェクトの連絡が来ました…対応します…)

ありがたいことに業務としてもモバイル開発をさせていただけることになったので、自分で知識をつけるのはもちろん、先輩からたくさん学びながら、2018年末には「アプリエンジニアです!」と自信を持って言えるよう頑張ります。

アウトプットする

上にも書いたように、2017年少しだけアウトプットしてみたところ、この準備過程で自分がやって来たことを丁寧に振り返ることができることに気がつきました。なので、2018年はもっと積極的に発表したり文章を書いたりして行きたいです。
今度はより技術的なことをアウトプットできると良いなと思います。

新年一つ目のアウトプットとして、『師弟登壇2018 【若手エンジニアの集い】』で、今年受けた研修のことをお話しします。 エンジニア職や、色々な会社の研修内容に興味がある方は是非。

最後に

長々と書いてしまいました。読んでいただいてありがとうございます。 来年もどうぞよろしくお願いいたします。

『.gitignore』を一瞬で作るメモ

Swiftでアプリ作ろうとしてた時、 GitHubを使って『.gitignore』ファイルを一瞬で作れることを(今更ながら)発見しました。

『.gitignore』って何?

gitでバージョン管理をする際に、対象から外すファイルを指定するものです。
例えばキャッシュのファイル等、いちいち変更をコミットしたくないファイルを無視できます。

(.gitignoreそのものについての詳細や、書き方などはいろいろと文献があると思うので割愛します。)

簡単に作るには?

まず、GitHub上で様々な言語に対応したテンプレートが公開されています。

GitHub - github/gitignore: A collection of useful .gitignore templates

しかし、これを毎回見なくても自分のリポジトリ内で一瞬でテンプレートを使用できます!!!!!

一瞬で作る方法

  1. GitHub上で、gitignoreを作成したいリポジトリページへ行き、『Create new file』をクリック。 f:id:shizuna-ito:20170606213738p:plain

  2. ファイル名を『.gitignore』と記述する。 f:id:shizuna-ito:20170606214130p:plain

  3. ファイル名の右側に『What to use a .gitignore template?』という記述が現れ、言語を選択できるようになる。
    f:id:shizuna-ito:20170606214519p:plain

  4. 自分の使用する言語(もしくは環境)を選択すると、勝手にテンプレートを適用してくれる

  5. テンプレートから過不足部分を変更する。

  6. コミットメッセージを入力し、『Commit new file』をクリック。

以上の手順で、その言語に対応したテンプレートの.gitignoreファイルを作成できます!
便利!!!!!

今までずっとテンプレート検索してローカルで作成していたのですが、こっちの方がすぐできそうでした。

ただし、テンプレート内容で自分の必要なものがまかなえるかはわからないので、
コメント内容等参考にしつつ、変更や追加は多少すると良いのかなと思いました。

今日の衝撃

はじめに

本当に久しぶりの更新です。この3月に無事大学を卒業し、社会人になりました。
入社してからグループ研修を受けたり、東京研修を終えて福岡に来たりしていますが、その話は福岡から帰ったら書きます。

このことか!と思った

ここ4ヶ月ほど何かと理由をつけてブログの更新をしていませんでした。
今日、同期の入社エントリを見てすごいなーと思い、ふと自分のブログを見てみました。

何気なくダッシュボードをみるとそこにはなんと、「更新日数 3日」の文字がありました。
3日坊主ってこのことか!!!
衝撃です。本当に綺麗に3日でやめることもあるのかと思いました。

というわけで、3日坊主から脱却するためにとりあえず思ったことを書きました。
これからはまた頑張った話とかを書きたいな…書けるかな…という気持ちです。

shibuya.swift#7に参加しました

shibuya.swift7

前回に引き続きshibuya.swiftに参加してきたので、その際のメモをまとめました。

https://shibuya-swift.connpass.com/event/47031/

日時

2017年1月26日(木)19:30〜21:30

会場

株式会社Branding Engineer

カスタムトランザクションやアニメーションを活用した「写真を生かすUI」のサンプル

fumiyasacさん

内容

  • CustomTransitionで遷移時の表現を彩る
  • 外付けクラス;アニメーション時間、アニメーションの実装
  • アニメーション実体を遷移のタイミングで適用する
  • 処理の実体はContainerViewを作成しその中に表示対象入れる
  • navigationがシンプルならアニメーションで目を引くUIに出来る!
  • 必要以上に大きく動きすぎないことを心がける
    • 秒数におけるパラメータの調整
    • 1画面に必要以上にいれすぎない
  • Customransitionの活かし方次第で画面遷移時の様々な表現が可能

業務で絶対必要にならない技術

nakajijapanさん

内容

  • NSTouchBar:いろんなものを動的にボタンにしよう
  • デザインについて
    • 表示したものの中にアクション実装
    • touchbarだけで完結するものはダメ
  • サンプルが充実してる
    • NSTouchBar Catalogが特に良い
  • simulatorが使える(touchBarないmacでも開発できる)
  • 実装
    • storyboardで視覚的に配置が可能
    • コンポーネントは以下のものがある
      • Button(NSCustomTouchBarItem)
      • GroupButton
      • Popover
      • Scrubber(collectionViewみたいなもの)
      • SharingService(SNSシェア用のコンポーネント
  • はまったポイント
    • 録画機能つけようとしたが、録画している時はフォーカスが別のアプリになってしまうのでストップできなかった
  • それ単体で完了する動作に適用するのが良い

merciless refactoring

チェンさん(@vc7, @vince78718)

内容

途中からSwiftLint

kuroyamさん

内容

  • SwiftLint:コードの品質チェックツール
  • 『「謎のスペースあります」「;が付いてます」などの無駄な修正→生産性落ちる』を防ぐ
  • minneのSwift化:6月から、約3割、メンバー同士で教えあう
  • SwiftLint入れた→warning999+(改行した時に空行に自動で入るスペースエラーなど)
  • 対策
    • 一旦全てのruleをdisable
    • スペースの有無、コロンの位置、末尾セミコロンの削除などのruleを一つずつ有効にして修正
  • はまったところ
    • 0.14.0からSwift3対応(minneはSwift2.3なので0.13.xを入れた)
    • バージョンみんなで合わせないと誰かのところだけワーニングみたいになる
  • コードを改善していく中でdisableにしたrule有効化していく
  • SwiftLintが絶対正しいわけじゃない。 チームの方針を優先するべき時もある。
  • 良かったこと
    • 細かい間違いでレビューする必要なくなった
    • SwiftLintのワーニングが見やすいように他のワーニングがでないようにしようという雰囲気が出てきた

Firebaseを使ってみたメモ(導入編)

iOSアプリ開発を始めた時からお世話になっていたParse.comがついにサービスを終了してしまうので、代わりとしてFirebaseを使ってみました。

Firebaseって?

  • Googleが提供しているMBaasサービス
  • Googleアカウントを持っていれば無料ですぐ始められる!
  • iOSAndroidJavascriptC++など様々なプロジェクトで使える

Firebaseでできること

  1. Analytics : アプリの使用状況等の測定分析。
  2. Authentication : ユーザー認証、ソーシャルログイン。
  3. Realtime Database : データベース。すべてのクライアントでリアルタイムに同期される。
  4. Storage : 写真などのファイルを管理。
  5. Hosting : webアプリ向け静的ホスティング
  6. Test Lab for Android : アプリテスト。Android用。
  7. Crash Reporting : アプリのクラッシュレポート。
  8. Notifications : Push通知。
  9. Remote Config : アップデート公開せずにUIや機能の変更を反映させる。
  10. Dynamic Links : リンクを開いたプラットフォームの状況に応じて動的に動作を変更する。
  11. AdMob : モバイル広告プラットフォーム。
  12. Cloud Messaging : メッセージの配信・通知。

Firebaseを始める

開発環境

Swift 3.0.1 Xcode 8.2.1

導入

1. Firebaseに登録

Firebase にアクセスし、無料で開始をクリックする。

f:id:shizuna-ito:20170112120912p:plain

2. プロジェクトを作成する

新規プロジェクトを作成をクリックし、下の画面が出てくるので必要事項を入力。 入力後、プロジェクトを作成をクリック。

f:id:shizuna-ito:20170112120900p:plain

3. 自分が作ったiOSアプリにFirebaseを追加

iOSアプリにFirebaseを追加をクリックし、必要事項を入力。 iOSバンドルIDは、Xcodeプロジェクトの中の『Bundle Identifier』の内容をコピーしていれる。 (App Store ID は省略できる。)

f:id:shizuna-ito:20170112121433p:plain

『GoogleService-Info.plist』というファイルが保存されるので、これをXcodeプロジェクトに追加。

f:id:shizuna-ito:20170112122041p:plain

CocoaPodsをプロジェクトに入れ、Podfileに以下のように記述する。 (今回はデータベースを試したいので'/Database'を入れる。)

f:id:shizuna-ito:20170112122412p:plain

pod installが正常に行われればFirebaseの導入は完了!!

まとめ

今回はまず導入までやりました。 Googleアカウントを使うことで面倒な登録もなく、公式ドキュメントが日本語対応していたためとても簡単に導入できたなという印象でした。

次回はデータベースの設定からデータの保存取得についてまとめようと思います。

shibuya.swift#6に参加しました

先日開催されたshibuya.swiftに参加しました。 その際メモを取ったので内容まとめました。 (タイトルをメモしていなかったものが多数あるのでその部分は曖昧です。)

shibuya.swift6

https://shibuya-swift.connpass.com/event/42712/

日時

2016年12月15日(水)19:30 〜 22:00

会場

ピクスタ株式会社

MetalでGPUコンピューティング

yuky_azさん

内容

  • MetalとGPUコンピューティング
  • MetalはiOS8で導入された画像処理や並列演算を効果的に行うフレームワーク
  • Metalを使ったGPU並列演算について取り扱う。
  • MetalShadingLanguageで記述したコードがGPU側で実行される。
  • CPUとの処理の比較
  • GPUとCPUに配列データの要素に1を足す処理をさせて処理速度を比較
  • リピート数が大きいと50〜60倍の差が出る!
  • ただし、小さいとGPUへのデータ転送などの時間の関係でCPUの方が処理時間が短い
  • Metalを用いた群知能の実装 (すみません、難しくて内容を追うので精一杯でした)

参考資料

http://qiita.com/yuky_az/items/ece9b64befc635e89f1a http://qiita.com/yuky_az/items/ce5920f28c08e743418b

結婚式専用アプリ

motokieeさん

内容

  • 実装背景
  • 結婚式で撮った写真を共有するのがめんどくさくて出来ていない
  • 全員で簡単に共有出来るアプリがあれば送る手間も省けてみんな送ってくれる&見れる
  • Firebaseを使用する
  • Push通知が送れる(Notification)
  • 少人数なので無料で出来る
  • お知らせページを作れる(JSONでStorageに保存)
  • 配布方法
  • deploygate使用
  • UDIDをもらうのに苦戦した(わからない人からしたら怖い)
  • 一人一人に丁寧に説明して解決した
  • 結果
  • 172枚のアップロードがあった
  • 一人が送った172枚ではなく一人平均5枚送ってくれた172枚というのが良かった

ローディング時のより良いUIの実装

macs_6さん

内容

  • 今までのローディング画面
  • プログレスバーかスピナーがほとんど
  • ローディング画面が長い(長く感じる)のも離脱の原因になる
  • Facebookなどのローディングが良い
  • 次に表示されるものがわかるのでユーザーに期待感を持たせられる
  • シマー効果
  • 流れるようにキラキラするやつ
  • Simmerという(昔のiOSのロック解除のUI)
  • ケルトンスクリーン
  • 次に表示されるviewに似せたプレイスホルダー

プレゼン資料

https://speakerdeck.com/matsue/rodeingushi-falseyoriliang-iuifalseshi-zhuang

SwiftのExtensionをモダンでオシャレに実装する

motokieeさん

内容

  • ExtensionをExtensionであることをわかりやすく書く
  • yamabukiという色の定義をした時にUIColor.yamabukiだと元々あるものなのかつくったものなのかわからない
  • UIColor.ex.yamabukiみたいにしたら分かりやすい
  • RxSwiftのswift3.0での変更も同じ(rx_text → rx.text)

プレゼン資料

http://qiita.com/motokiee/items/e8f07c11b88d692b2cc5

RxTestを使ったUI層のテスト

Nonchalantさん

内容

  • VC, Presenter, ViewModelの設計にすることでテストしやすくなる
  • VCからUIEventを受け取り、ViewModelにデータ反映するPresenterを作ることでてストライクにする
  • UI層(Presenter)のテスト
  • Quick, Nimble, RxTestを使ったテストの実装例

プレゼン資料

http://qiita.com/Nonchalant/items/37aed854bac4371fef4a

AbemaTV on Apple TV (tvOS入門)

dekatotoroさん

内容

  • Apple TVについて
  • Apple TVの機器自体について
  • UIKitで開発するTraditional AppsとtvOS独自のCliant-Server Appsがある
  • 開発の概要(Icon, Layout, Interface Elementsなど)
  • AbemaTV on tvOSの開発
  • 2か月、エンジニア2名+ディレクター1名+デザイナー1名
  • iOSアプリとは別プロジェクトで開発
  • UI/UXを標準的なものに合わせた

プレゼン資料

http://www.slideshare.net/yuujihato/abematv-on-tvos

感想

まず、『学生向け』や『初心者』というタイトルでないイベントに今まで少し怖さがあり参加していませんでしたが、想像していたよりずっと気軽に皆さん発表していらっしゃって参加しやすかったです。また、MetalやtvOSなど、自分が今まで使用したことのなかった部分は入門的な内容もあり分かりやすかったです。 今回は参加者として皆さんのTalkやLTをお聞きするだけでしたが、また参加するときには自分も何かお話できるように頑張ろうと思いました。