Railsの勉強がてらMarkdownでかけるメモアプリを作成した話

作成しました。

f:id:jesus9387:20170925215530p:plain

サイトはこちらになります。https://mysterious-wildwood-63267.herokuapp.com/

主な機能

  • ログイン

    • ログインはツイッターアカウントでログインできるようにしました
    • ログイン.gif
  • 投稿、編集

    • Markdownを書くと右側にパースした結果が表示されていきます。
    • 投稿.gif

  • 編集も可能です
  • 編集する.gif

  • 検索

    • ワード検索、日付検索、することが可能です。

使った技術

なぜ作ったか

Ruby on Railsがやりたかったからです。 これが一番の理由かもしれません。

他には

  • 自分はアプリ開発をメインで行っていますがこの機会にWebアプリケーションを作成してみていつもと違った視点を学びたかった
  • オールランダーな人間になれると思ったから(アプリ開発、サーバーサイド、APIの作成、Webアプリケーションをやったことがあるという経験)

上記のような理由でやってみました。

現在は

このWebアプリケーションを作ったという経験ができて満足してしまいました。笑 バグがたくさん内在しています笑 でも、あくまで「経験すること」を意識したのでもうこれでいいかなと思います。

また、今はiPhoneアプリを開発しています。 だいぶ完成に近づいてきていてもうすぐリリースかなというところです。

よければ

ソースコードは下記におきましたのでよければどうぞ https://github.com/yshogo/katana.mb

また、ツイッターもやっているのでよければフォローお願い致します。 https://twitter.com/yshogo87

AppleWatch series3を購入しました。

購入しました。

f:id:jesus9387:20170923002617j:plain:w300:h500

なぜ購入したのか

ロマンです。 ガジェット好きの血が騒いだからです。

デザイン

かなりいい感じ。

f:id:jesus9387:20170923002832j:plain:w300:h500

これから

Watchアプリの作成もしていきたいなと思います。 今考えているのはWatch から筋トレの記録を保存したらGoogleカレンダーに保存するようなものアプリを考えています。 その前に今作成しているメモアプリを完成させてリリースしなければ、、、

iOSDC 2017に参加したら最高だった

参加してきました!!!

f:id:jesus9387:20170918231155j:plain:w300:h300

感想

こういうのは初めて参加しましたが、とても楽しかったです! 自分の専門外の知識を得ることができ、周りにいる方もみんなプログラミングが好きそうな人たちが集まっていてかなり楽しかった!!

発表を聞いたもの

SwiftとKotlin

speakerdeck.com

この発表では主にSwiftとKotlinの違いや、設計思想のようなところを発表してくださいました。 業務ではAndroid開発をしていてKotlinもSwiftも書いている自分としてはかなり興味深かった。

個人の感想としてSwiftとKotlinは設計思想の根本から違うと考えています。 なぜかというとSwiftはObjective-cと同じC言語をベースとした設計思想で、 KotlinはJavaベースの設計思想ということにかなり違いがあると思います。 この話は別の記事にします。

Swift4.0対応しようとしたら大変な目に遭った話

speakerdeck.com

ライブラリをSwift4に対応しているという話です。 個人的に興味深かったのは「NotAutolayout」というライブラリです。 Autolayoutはかなり学習コストが高く私自身今現在かなり苦戦していますが、 「もう使わずにレイアウトはすべてコードで書こうぜ!」というライブラリです。

かなり興味深いですか、実行するまでレイアウトが見えないのはなかなか辛いものがあります。 結局Autolayout使うしかないのかな、、、

メルカリで実施した過去最大規模のABテスト「ドロワーvs下タブ」の舞台裏

speakerdeck.com

メルカリUS版ではドロワーと下タブでABテストをするためにこんな実装したよという話でした。 AppDelegateでレイアウトを管理するEnumを作成し、 そこからサーバーから返すデータによってレイアウトを分岐させていくようにしたとの説明がありました。

確かにこれだとABテストが終わったときファイルの削除が、Enumの削除で全てできるので便利だなーと思いました。

AutoLayoutと友達になる方法

speakerdeck.com

Autolayoutのコツみたいなものを紹介してくださいました。 制約の付け方、またその制約の確認方法などかなり勉強になりました。 自分のこれからの実装に生かしていきたいと思います。

初めて作るIoT機器とBLEの光と闇

これはIoT機器で受け取ったデータをiPadに送るということをやろうとしたらかなり大変だったとい話でした。 昔、自分が大学生のときにBLTを使った在室管理システムを作成したことがありそのとき問題だったのは他の BLT信号を同時にたくさんiPadが取得してしまうのが問題でした。 その辺はどのように対応しているのか質問しに行こうとAsk the speakerに行ったらもういなかった、、、、

また機会があればその辺の話もしたいな〜

発表を聞いて

来年こそは自分も発表したい! 決意を込めてこんなツイートをしました。

来年こそは!!!!!!!

最後まで読んでくださりありがとうございました。 よろしければツイッターのフォローよろしくお願いします。

twitter.com

1日のCommit数をツイートするAPIを作った話

作成したもの

こんな形で1日のCommit数をGithubから数えて自動でツイートするものを作成しました。

なんで作ったか

1日のコミット数をみて 「今日も頑張ったなー」っていって寝たいなーと思っただけです。

また、Mazの発表会?イベント?に参加して、なんか急にRubyをやりたくてはじめました。笑

bbg.connpass.com

そもそもこのAPIを作ることは自分の作りたいものリストの中に入っていてこの機会にやってみました!

使ったもの

開発期間

  • 1日

これから

現在は自分一人しか使えないようになっていますが、 下記のようなリプライをいただいたので誰でも使えるようなものに改良しています。

完成したらまた記事にしたいなーと思います。

また、完成したらTwiiterに投稿しますのでよければフォローお願い致します。

twitter.com

Firebaseを使ったGoogleログイン[Swift]

ハマったのでメモとして残しておきます。 前提としてFirebaseの設定が終わっているものとします。

AuthenticationでGoogleログインを許可する

  • Firebaseの管理画面を開き「ログイン方法」タブからGoogleログインを有効にする

f:id:jesus9387:20170908122455p:plain

インストール

  • Podfileを開き下記を追加
pod 'Firebase/Auth'
pod 'GoogleSignIn'
  • pod install を実行

REVERSED_CLIENT_IDを設定

Info > URL Typeに、以下の2つのエントリを追加する

  • GoogleService-Info.plist のREVERSED_CLIENT_IDの値をコピーする

f:id:jesus9387:20170908122611p:plain

  • URL Typeにペースト

f:id:jesus9387:20170908122727p:plain

AppDelegateを編集

import UIKit
import CoreData
import Firebase
//追加
import GoogleSignIn

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        FirebaseApp.configure()

        //追加
        GIDSignIn.sharedInstance().clientID = FirebaseApp.app()!.options.clientID
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {

    }

    // 追加
    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
        -> Bool {
            return GIDSignIn.sharedInstance().handle(url,
                                                     sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                                                     annotation: [:])
    }


    func applicationDidEnterBackground(_ application: UIApplication) {

    }

    func applicationWillEnterForeground(_ application: UIApplication) {
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
    }

    func applicationWillTerminate(_ application: UIApplication) {
        self.saveContext()
    }

Storyboardにボタンを追加

  • StoryBoardにViewを貼り付けクラスにGIDSignInButtonを設定

f:id:jesus9387:20170908122811p:plain

ViewCotroller編集

import UIKit
import Firebase
import GoogleSignIn

class ViewController: UIViewController,GIDSignInUIDelegate, GIDSignInDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        GIDSignIn.sharedInstance().uiDelegate = self
        GIDSignIn.sharedInstance().delegate = self
    }

    @IBAction func tapGoogleSingIn(_ sender: Any) {
        GIDSignIn.sharedInstance().signIn()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {


        if let error = error {
            print("Error: \(error.localizedDescription)")
            return
        }
        let authentication = user.authentication
        // Googleのトークンを渡し、Firebaseクレデンシャルを取得する。
        let credential = GoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!,accessToken: (authentication?.accessToken)!)

        // Firebaseにログインする。
        Auth.auth().signIn(with: credential) { (user, error) in
            print("ログイン成功")
            //画面遷移処理
        }
    }
    //エラー処理
    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
        print("Sign off successfully")
    }


}

完成

  • ログインボタンをタップするとGoogleのログイン画面が表示されます。 f:id:jesus9387:20170908123059p:plain

よければ

Rails初心者がLineBotを作った話[Ruby on Rails]

Rails初心者がLineBotを、作った話

作ったもの

何食べるか迷った時に CookPadで検索しその結果を返してくれるBotです。

f:id:jesus9387:20170905120607p:plain:h300

  • 友達登録は下記のQRコードからお願い致します。

  • スマホでこの記事を見ている方は下記をタップすると友達登録できます。

友だち追加

詳しい機能はGithubに書きましたのでこちらを見てください。 (https://github.com/yshogo/CookpadLineBot)

なぜ作ったのか

ご飯は彼女が作ってくれるんですが いつも「今日は何食べたい?」と聞いてきて自分はいつも同じようなものを頼んでいたのでLineBotに考えてもらおう!と思い作りました。

よくよく考えてみたら自分の母もいつも「今日のご飯何にしようかなー」といってるのでこの機会に使ってもらおうと思いました。

開発について

普段はAndroidアプリを開発する仕事をしていて プライベートではiOSアプリを書いています。

前々からRailsをやりたいと思っていたんですが、いいアイデアが思い浮かばずにいました。 ですが、この機会なのでRailsを使いました。

Ruby on Railsを使ってみて

個人的にかなり難しいと感じました、、、 そもそも前に作った開発環境でrails newしたらエラーなって1から作り直して rails s ってやるとエラーがでてうわあああーーっとなりました(笑)

開発環境はじまるとRubyの文法に惚れ込んでしまって書いているのが楽しくなっていきました。 前にまつもとゆきひろさんの講演を聞きにいった時「触ってて楽しい言語にしたい」とおっしゃっていてそれがすごく伝わってきました。

実装について

実装はCookPadの公式サイトをWebスクレイピングします。 gemはnokogiriを使用しました。

github.com

最後に

今作っているiOSアプリのサーバーサイドはすべて Firebaseを使っているのでAPIの必要がないですが また機会があればやってみたいなーって思いました。

ディスプレイって複数あったほうが本当に便利なの??

最近ディスプレイが2枚あるより1枚で作業したほうが作業が捗っているので それについて考えてみた。

(この記事はプログラマーからの目線でお話しします)

f:id:jesus9387:20170823200631j:plain

家での作業環境。最近はディスプレイを使っていない。

ディスプレイが増えると雑音が増える

私は業務でAndroidアプリを開発しています。 ですので業務のほとんどはパソコンの前でコードを書いています。

一つのディスプレイで作業しているときに別のディスプレイでチャット通知がくるとついつい読んでしまったり、メールが来たらすぐ読んでしまったりします。 そのせいで、メインの作業に集中できなくなってしまっているような気がします。

そもそも緊急の連絡などがあれば口頭で確認しますし、その他の情報共有ならすぐ確認する必要はないと思います。

ディスプレイがいくらあっても作業できるのは1つのウインドウだけ

同時にいっぱいウインド並べて複数のディスプレイで確認しても作業できるのは1つのウインドウだけです。 なので最近はMacBookのディスプレイだけで作業しています。

サンプルソースを読みながら作業するよりウインドウ切り替えたほうが速くコードかける気がする

MacOSには仮想ディスプレイという便利な機能があるので私はそれを使ってウインドウを切り替えています。

1つのディスプレイに一つのウインドを割り当てて切り替えて作業します。

このほうが一つのことに集中できると考えています。

support.apple.com

そもそもディスプレイが複数あると首が痛くなる

これは私個人がなることですが、ディスプレイが複数あると首を動かす範囲が大きくなり首が痛くなります。

また自分の真正面にディスプレイがない状態で作業すると常にどちらかに首を向け続けている可能性がありますので尚更首が痛くなります

最後に

この記事は、プログラマーの私が考えることで別の業種の方は複数ないと作業できない!!って方もいらっしゃると思います。

同業種の方へ少しでも作業効率が向上すればなと思います。 ありがとうございました。