1日のCommit数をツイートするAPIを作った話
作成したもの
今日はGithubに10回commitしました。 https://t.co/3Uu7JyBwBh
— shogo.yamada (@yshogo87) 2017年9月10日
こんな形で1日のCommit数をGithubから数えて自動でツイートするものを作成しました。
なんで作ったか
1日のコミット数をみて 「今日も頑張ったなー」っていって寝たいなーと思っただけです。
また、Mazの発表会?イベント?に参加して、なんか急にRubyをやりたくてはじめました。笑
そもそもこのAPIを作ることは自分の作りたいものリストの中に入っていてこの機会にやってみました!
使ったもの
開発期間
- 1日
これから
現在は自分一人しか使えないようになっていますが、 下記のようなリプライをいただいたので誰でも使えるようなものに改良しています。
良さそう!使いたいです!
— K-BOY@筋肉エンジニア (@kboy_silvergym) 2017年9月9日
完成したらまた記事にしたいなーと思います。
また、完成したらTwiiterに投稿しますのでよければフォローお願い致します。
Firebaseを使ったGoogleログイン[Swift]
ハマったのでメモとして残しておきます。 前提としてFirebaseの設定が終わっているものとします。
AuthenticationでGoogleログインを許可する
- Firebaseの管理画面を開き「ログイン方法」タブからGoogleログインを有効にする
インストール
- Podfileを開き下記を追加
pod 'Firebase/Auth' pod 'GoogleSignIn'
pod install
を実行
REVERSED_CLIENT_IDを設定
Info > URL Typeに、以下の2つのエントリを追加する
- GoogleService-Info.plist のREVERSED_CLIENT_IDの値をコピーする
- URL Typeにペースト
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
を設定
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のログイン画面が表示されます。
よければ
ソースは下記に置いたのでどうぞ github.com
Twitterもフォローお願い致します。( https://twitter.com/yshogo87 )
Rails初心者がLineBotを作った話[Ruby on Rails]
Rails初心者がLineBotを、作った話
作ったもの
何食べるか迷った時に CookPadで検索しその結果を返してくれるBotです。
詳しい機能はGithubに書きましたのでこちらを見てください。 (https://github.com/yshogo/CookpadLineBot)
なぜ作ったのか
ご飯は彼女が作ってくれるんですが いつも「今日は何食べたい?」と聞いてきて自分はいつも同じようなものを頼んでいたのでLineBotに考えてもらおう!と思い作りました。
よくよく考えてみたら自分の母もいつも「今日のご飯何にしようかなー」といってるのでこの機会に使ってもらおうと思いました。
開発について
言語
サーバー
- heroku
開発マシン
- MacBookAir 13inch
普段はAndroidアプリを開発する仕事をしていて プライベートではiOSアプリを書いています。
前々からRailsをやりたいと思っていたんですが、いいアイデアが思い浮かばずにいました。 ですが、この機会なのでRailsを使いました。
Ruby on Railsを使ってみて
個人的にかなり難しいと感じました、、、 そもそも前に作った開発環境でrails newしたらエラーなって1から作り直して rails s ってやるとエラーがでてうわあああーーっとなりました(笑)
開発環境はじまるとRubyの文法に惚れ込んでしまって書いているのが楽しくなっていきました。 前にまつもとゆきひろさんの講演を聞きにいった時「触ってて楽しい言語にしたい」とおっしゃっていてそれがすごく伝わってきました。
実装について
実装はCookPadの公式サイトをWebスクレイピングします。 gemはnokogiriを使用しました。
最後に
今作っているiOSアプリのサーバーサイドはすべて Firebaseを使っているのでAPIの必要がないですが また機会があればやってみたいなーって思いました。
ディスプレイって複数あったほうが本当に便利なの??
最近ディスプレイが2枚あるより1枚で作業したほうが作業が捗っているので それについて考えてみた。
(この記事はプログラマーからの目線でお話しします)
家での作業環境。最近はディスプレイを使っていない。
ディスプレイが増えると雑音が増える
私は業務でAndroidアプリを開発しています。 ですので業務のほとんどはパソコンの前でコードを書いています。
一つのディスプレイで作業しているときに別のディスプレイでチャット通知がくるとついつい読んでしまったり、メールが来たらすぐ読んでしまったりします。 そのせいで、メインの作業に集中できなくなってしまっているような気がします。
そもそも緊急の連絡などがあれば口頭で確認しますし、その他の情報共有ならすぐ確認する必要はないと思います。
ディスプレイがいくらあっても作業できるのは1つのウインドウだけ
同時にいっぱいウインド並べて複数のディスプレイで確認しても作業できるのは1つのウインドウだけです。 なので最近はMacBookのディスプレイだけで作業しています。
サンプルソースを読みながら作業するよりウインドウ切り替えたほうが速くコードかける気がする
MacOSには仮想ディスプレイという便利な機能があるので私はそれを使ってウインドウを切り替えています。
1つのディスプレイに一つのウインドを割り当てて切り替えて作業します。
このほうが一つのことに集中できると考えています。
そもそもディスプレイが複数あると首が痛くなる
これは私個人がなることですが、ディスプレイが複数あると首を動かす範囲が大きくなり首が痛くなります。
また自分の真正面にディスプレイがない状態で作業すると常にどちらかに首を向け続けている可能性がありますので尚更首が痛くなります
最後に
この記事は、プログラマーの私が考えることで別の業種の方は複数ないと作業できない!!って方もいらっしゃると思います。
同業種の方へ少しでも作業効率が向上すればなと思います。 ありがとうございました。
Swiftでの配列(Array)同士を繋げ方
配列同士を繋げる
- Swiftでは配列と配列を繋げるには「+」でできる
var array1 = Array<String>() array1.append("Swift1") array1.append("Swift2") // array1 = ["Swift1","Swift2"] var array2 = Array<String>() array2.append("Kotlin1") array2.append("Kotlin2") // array2 = ["Kotlin1", "Kotlin2"] // array1 と array2 を繋げる let array3 = array1 + array2 array3.forEach{ word in print(word) }
出力結果
- 個人的に迷ったのでメモ
Material-components-iOSでiPhoneにマテリアルデザインを組み込む[Swift]
使ってみてよかったので共有する 今回使用するファイルはこちら https://github.com/material-components/material-components-ios
インストール
Githubの手順通りに進めていく
- cocoapodsのインストール(インストール済みの場合はスキップ)
sudo gem install cocoapods
- podファイル作成(作成済みの場合はスキップ)
pod init
- podファイルに下記を追加
pod 'MaterialComponents'
- コンポーネントのインストール
pod install
使ってみる
Raised button
storybordにボタンを追加してclassを「MDCButton」にする
すると、マテリアルボタンができる
Floating action button
これも同じ手順で下記を「MDCFloatingButton」を設定する
すると、Floating Buttonが作成できる
ボタンの色や、背景色を変更する場合は下記のコードを追加
- 文字色の変更
materialButton.setTitleColor(UIColor.white, for: .normal)
- 背景変更
materialButton.setBackgroundColor(UIColor.blue, for: .normal)
Material dialog
- podファイルに下記を追加する
pod 'MaterialComponents/Dialogs'
- インストールする
pod install
- ダイアログを出したいときに下記のコードを追加する
let alertController = MDCAlertController(title: "Material Dialog", message: "This is Material Dialog! Let's Start Now!") let action = MDCAlertAction(title:"OK") alertController.addAction(action) present(alertController, animated:true)
すると、ダイアログが出る
他にもいろんなcomponentが用意されているのでぜひ使ってみてください https://material.io/components/ios/
Swiftでの画面遷移についてまとめ
よく忘れるのでメモとしてまとめる
Storybordだけで画面遷移
シンプルな画面遷移。 ボタンと次に表示するViewControllerをsegueで繋げるだけで完了
コードから画面遷移
画面遷移したいタイミングで下記のコードを追加する
let storyboard = self.storyboard! let nextView = storyboard.instantiateViewController(withIdentifier: "viewcontroller2") self.present(nextView, animated: true, completion: nil)
withIdentifierにはViewControllerのIdentifyで設定した名前を書く
NavigationControllerで画面遷移
NavigationControllerを下記の手順で追加する
Editor → Embed In → NavigationController
追加したらStoryBoardだけで画面遷移で書いたのと同じようにsegueでViewController同士をつなげれば完了
NavigationControllerを使ってコードで画面遷移
方法1 performSegueを使う
①遷移元のViewControllerの黄色のボタンから遷移先のViewControllerへドラッグ&ドロップしてsegueで繋げる
②segueを選択し、Identifierを設定する
③画面遷移させたいときに下記のコードを追加する
performSegue(withIdentifier: "Test", sender: nil)
この方法は遷移するViewControllerが2個程度と少ない場合に使っている
方法2 PushViewControllerを使う
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "Test") as! SecoundViewController self.navigationController?.pushViewController(secondViewController, animated: true)
Testの箇所には遷移先のStoryboardIdに設定した値を入力
SecoundViewControllerは遷移先Storybordに設定したViewControlerを書く
ちなみに、コードで戻る時は下記のコードでできる
_ = navigationController?.popViewController(animated: false)
この方法はnavigationControllerを配列にして管理することができるので 一気に2個戻るというようなことも簡単です。
他にも画面遷移する方法はたくさんありますが、自分がよく使うものをメモとして残しておきます。