paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

開発合宿@河口湖がすごく良かったというお話

f:id:paranishian:20180915082219j:plain

先日行った開発合宿@河口湖がすごく良かったのでブログに記録していきます。

文才がみじんこなのでそこは写真で補うスタイル🤗

今回はここにお邪魔しました。

www.c-ban.com

金曜夜から出発し、22時頃に河口湖カントリーコテージに到着。

まずは買い込んだお酒とボドゲを堪能し、夜更かし気味で就寝。

f:id:paranishian:20180915003750j:plain
タイムボムおもしろい

翌朝からさっそく活動開始!

敷地内にあるカフェで朝飯(朝食セット:800円)を平らげ、

f:id:paranishian:20180915090647j:plain
ポトフがうめぇ。。。

チェックアウトを済ませ、そのままカフェで開発スタート!

カフェの貸し切りって普段はしてないらしいのですが、交渉の末?、開発合宿で利用できることになりました。

そういえば、施設の人に「今日はどういうことするの?」って聞かれて、 「世界を少しでも幸せにするもの作りに来ました」ってゆったらなんかハマってめっちゃ気に入られた。

あと、spotifyでてきとーに音楽流してたら「まるで東京のカフェみたいだね」って嬉しそうに笑ってくれた。

なにこの癒し空間、、、すてき。

f:id:paranishian:20180915111431j:plain

カフェにはWIFIも電源もあるのでどこで開発してもよし。

あいにくのお天気やったけど、景色が最高。のどかすぎる。。こういうとこでずっと開発していたい。。

開発メンバーみんな1週間くらいここでリモートしたいってずーっとゆってた。

f:id:paranishian:20180915123322j:plain

ランチにはカレーが提供されたので、なんだか林間学校気分。

f:id:paranishian:20180915123047j:plain

カレーのあとはオーバークックで遊んでリフレッシュ。 f:id:paranishian:20180915132014j:plain

このゲーム最高すぎやしませんかね。。 ec.nintendo.com

休憩はほどほどに、開発を再開し、あっというまに17時。

そこから各々開発したものを発表していきました。

f:id:paranishian:20180918093329j:plain
Elixir + Phoenixでツール作ってみた

f:id:paranishian:20180915174437j:plain
Reactでwebサービス作ってみた

f:id:paranishian:20180915171035j:plain
こ、、こいつは・・・!!

途中でデモが動かなくなって、みんなでモブプロみたいに解決したのもおもしろかった。

僕は個人開発の塩漬けになりかけたものをswift + firebaseで復活させるべく奮闘しました。NoSQLにまだ慣れない/(^o^)\

実はやりたいことがあるけど腰が重くてなかなか手が出せないでいる。。。みたいなものの背中を押してあげるのに、開発合宿ってちょうどいいなとおもった。

こういうきっかけ作りに貢献できるの素敵やし、将来田舎に移住する予定なので、地方でなにかそういった活動ができたらいいなとふんわり思った。

なにはともあれ、リリースするまでが勝負なのでこのまま勢いを落とさず頑張るゾイ!

それでは👋

swiftを一から勉強してTODOアプリをつくるまでの過程

仕事でしばらくwebで活動していたのですが、フリーランスになったことだし、アプリ開発をまた再開しようと思い、swiftを勉強してみることにしました。

また、今回swiftを勉強するにあたり、その過程もメモしていきました。
学習の過程って意外と忘れがちですよね 😪

最終成果物はgithubにおいてます 😃
paranishian/iOSToDoApp: iOS TODO app using Realm

まずはswiftの言語仕様を理解する

iOSアプリを開発していたのはObjective-C全盛期?の4年前くらいなので、swift自体初めて触るわけで、、、まずはswiftの言語仕様をおおまかに理解するために、公式docに目を通しました。

↓こちらはswift4には追いついていませんでしたが、英語での理解不足を補うために一緒に読みました。感謝 🙏

ちょっと手元で試してみたい、ってときはpaizaを使いました。web上で手軽に試せて便利 😆

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO

ここで理解したこと

  • クロージャーの構文
  • defer
  • where
  • try?
  • ??
  • error handling
  • tuple
  • guard/else
  • stride

このときの印象は、、、「swiftめっちゃ引数わかりにくい...!!! 😇 」 どれがkey??どれがvalue??どれが返却値??みたいな 🤣

TODOアプリをつくる

swiftの仕様はおおまかに理解できたので、なにかアプリをつくって学習するのが手っ取り早いなーと思い、仕様で迷うことが少なそうなTODOアプリを作ることにしました。
データを扱う上で、CoreDataかRealmかで迷いましたが、「使ったことがなくて触ってみたかった」という理由でRealmを採用しました。

まずはRealmのリファレンス通りにつくっていく

ありがたいことにRealmにTODOアプリのdocがあったのでそこを見ながら進めました。

ライブラリ管理ツールを決める

CocoaPodsかCarthageか迷いましたが、ライブラリ数ではまだまだCocoaPodsが優勢、との話を友人から聞いたのでCocoaPodsにしました。

ちょっとした変更と修正

Realmのdocではサーバ同期ありきで書かれているのですが、今回はローカルだけで使いたかったのでsetup部分を少し変更しました。
また、ドキュメントどおりだとどうしてもうまくいかない部分があったのでゴニョゴニョしました。 (if realm.objects(TaskList.self).count == 0の部分)

func setupRealm() {
    let config = Realm.Configuration(schemaVersion: 1)
    self.realm = try! Realm(configuration: config)
    func updateList() {
        // まだTaskListが存在しない場合は追加する
        if realm.objects(TaskList.self).count == 0 {
            try! realm.write {
                realm.add(TaskList())
            }
        }
        if let list = realm.objects(TaskList.self).first {
            items = list.items
        }
        tableView.reloadData()
    }
    updateList()
    // Notify us when Realm changes
    self.notificationToken = self.realm.observe { _,_ in
        updateList()
    }
}

ってなかんじでTODOアプリが完成! 🎉
(ほぼサンプルのままだけど)

paranishian/iOSToDoApp: iOS TODO app using Realm

とりあえず動くものが完成したので、あとは

  • TODOアプリに機能追加
  • 別のアプリつくる
  • fastlaneでbuild自動化

あたりかな〜。

それではまた 👋

開発用.devがhttpsに強制リダイレクトされて困った件

pow使ってて開発してたら、急にSafariChromehttpsに強制リダイレクトされるようになったので対応。 (Chromeはv63からこの仕様になったぽい)

対応

インストールし直せばOK。
(ver0.6.0から、トップレベルドメイン.devではなく.testがデフォルトになってる)

Pow User's Manual

Switch top-level domain from .dev to .test. Google owns .dev and enabled HSTS on it, breaking non-HTTPS sites. The .dev TLD is still enabled for backward compatibility, but .test is the new default.

$ curl get.pow.cx/uninstall.sh | sh
$ curl get.pow.cx | sh

powder使ってる場合はコマンドでもOK。 (やってることは同じ)

$ powder uninstall
$ powder install

参考