はつねむさんぽのパンくずたち

エンジニアになる人生で通った道のあしあと

LINEのサマーインターンに参加した

目次

はじめに

この記事は良いことを書いている記事ではない。私の主観的なメモである。

インターン概要

エンジニア就業コースのiOS枠で参加した。
京都オフィスで9月一ヶ月間、LINEアプリの機能を開発した。

応募した理由

LINEのインターン選考は倍率が高く難しいと聞いたので、
力試しに受けてみようと思ったことが応募したきっかけである。
実際WEBテストはかなりボリューミーだったし、
面接では思考力を問われる質問が多かった。
また、多くの人が使っているサービスをいじれることにも興味があった。

感じたこと

いいところ

  • オフィスが綺麗。緑がメインカラーなのも自然的で良い感じ。
  • 外国人が多く、英語が飛び交っている(京都オフィスは特に)。
  • メキシコの夫婦がメキシカンパーティを開いてくれたり、異文化に触れられて楽しかった。
  • 抱えているユーザ数が多い
  • 給料が高い
  • 完全裁量労働制でびっくりするくらいホワイト。メンターさんは毎日私より後に出社して、私より先に退社していました。


よくないところ

  • 人事の方、エンジニアの方、プランナーの方、それぞれがそれぞれとコミュニケーションをうまく取れていない気がした。
  • インターン生のことを邪魔だと思っているように感じた瞬間が何度かあった。仕事の量が増えるから仕方ないかもしれないが。
  • ホワイトで給料が高いゆえに、"ラク"が目についた。
  • もっと社員さんたちに夢を語ってほしかった。


悔しかったこと

プランナーさんが提案した機能の中から1つを選び完成させたのだが、
結局それはたいしたチェックもされずにおじゃんになった。
(開発中に聞いた話では、プランナーさんが好んでいない機能だったらしい。)

1ミリも爪跡を残せなかった。
たくさんの憤りも感じたが、私がこの会社の開発プロセス
よく分かっていなかったことも原因の一つである。
一心不乱に開発していて、バカだったなあと泣けてくる。
常に先のことを見据えておくことが大切だと学んだ。

得たこと

技術力の面で言うと、
一ヶ月間コンパイルに10分もかかる大きなプロジェクトを触ったおかげで、
Swiftの力やデバッグの力が上がったと思う。少し自信もついた。
また、意味不明だったObjective-Cも読めるようになった。

技術以外の面では、
自分がどんな会社に就職してどんな人たちと働きたいと思っているか、
何を重視しているかが掴めてきた。

このインターンに参加してよかった。

UITextFieldに文字数制限をつける

やりたいこと

  • UITextFieldに入力できる文字数を制限する
  • 変換中は制限されない
  • 確定した時にオーバーしている分は除かれる
  • 確定した時に文字数をカウントする

    f:id:hatsunem:20180921183433g:plain

考えられる解決策

stringByReplacingCharactersInRangeを使う

textField.delegate = selfとして、以下を追加。

extension ViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        // 文字数制限の処理
        return true
    }
}

英語入力の場合は問題ないが、
日本語などの変換がある言語の場合はうまく動かなかった。
関数が実行されるタイミングと変換との相性が悪いようだ。

UIControlEvents.EditingChanged

UIControlEventsというもので、様々なイベントをキャッチできるみたい。
その中に、textFieldChangedなるイベントがあった。
これを感知した時のactionを設定すれば良い。
重要なのはChangedと過去形なところ。

textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)


markedTextRangeは、変換中(確定前)の文字列である。
今回の私の要求に応えてくれるめっちゃ便利なやつ。

@objc private func textFieldDidChange() {
    guard let text = textField.text else { return }
    // 変換中はスルー
    if textField.markedTextRange != nil { return }    
    if text.count > maxLength {
        textField.text = String(text.prefix(maxLength))
    }
}


UITextFieldTextDidChange

viewDidLoad等でUITextFieldTextDidChange通知を受け取れるように設定。
こっちのやり方でも希望の動作は得られる。
ただ、同一クラス内でNotification使うのはどうなんかな、、

NotificationCenter.default.addObserver(
    self,
    selector: #selector(textFieldDidChange),
    name: NSNotification.Name.UITextFieldTextDidChange,
    object: nil
)


呼ばれる関数の中身はさっきと同じ。

@objc private func textFieldDidChange(notification: NSNotification) {
    guard let text = textField.text else { return }
    if textField.markedTextRange != nil { return }
    if text.count > maxLength {
        textField.text = String(text.prefix(maxLength))
    }
}

ベストな解決策

2つ目のUIControlEvents.EditingChangedを使うのが個人的にベスト。
別ビューに文字列を渡したい時はNotificationを使うのがよそそう。

UITableViewのヘッダーに置いたUIButtonが効かない時の原因

問題

UITableViewのヘッダーにUIButtonを含んだビューを設定しているが、
UIButtonを押しても反応しない。

原因

ヘッダーの高さを指定していなかったことが原因。
Heightが0のビューの上にUIButtonが乗っている状態になっていた。
画面のタップ情報はsuperviewから伝わるので、
superviewがUIButtonを覆っている必要がある。

解決策

ヘッダーの高さを指定してあげる。

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return headerHeight
}

Treasureに参加して得たもの

はじめに

この夏、VOYAGE GROUPのインターン「Treasure」に参加した。


この記事では、Treasureの説明を少し交えながら、
主にはこのインターンを通して私が学んだこと、感じたことを書いて行く。


Treasureとは

8月の後半3週間で行われるエンジニア向けインターンである。
前半は講義、後半はチーム開発というスケジュールだ。
講義を行ってくれるインターンは珍しいのではないだろうか。


スーパー講師たちによる講義

GO、JavaScriptAPI、セキュリティ、DB、チーム開発、アイデアソン。
すごい範囲の講義が行われた。


正直ついて行くのは大変だったが、
TAさんの親身なサポートにより乗り越えることができた。
私の意味不明な質問にも答えてくれてかっこよかった。


前半の講義が終わった時点で出される中間課題では、
人生で初めてGO + JavaScriptWEBサービスを作った。


チーム開発で作ったもの

開発はアイデアソンから始まった。
今回教わったアイデアの出し方は、
時流からU(ユーザ)N(ニーズ)S(ソリューション)を考えるというものである。


私たちが選んだ時流は以下の3つ。

  • みんなで参加、一体感・ライブ感を求める
  • 写真の需要・映えの流行り
  • 内輪で盛り上がるコミュニティ

これらから、以下のようなUNSを考えた。

  • U: イベント(旅行、インターンなど)の主催者、参加者
  • N: イベントを盛り上げたい、共有したい!
  • S: お題に沿って写真を投稿するライブフォトアプリ


私はクライアント側を担当してSwiftを書いた。
限られた時間の中で作らなければならない、ということと
チーム開発なので自分一人のプロダクトではない、という責任から
今までになく力が入っていた。
Swiftの技術力をあげることができたと思う。


またチームマネジメントについても学べた。
チームの議論がなかなか進まない時や、重要なことを見落としている時の
サポーターさんたちの助言はとても頼りになった。
繰り返し助言してくれたことで、自分でも意識できるようになった。


それぞれにいいところがある、素敵なチームだった。
他のチームもそうだったように思う。


どんな3週間だったか

最高の3週間だった。


まずTreasure生が全員最高。
30人もおってこんなことある!?ってぐらいいい人ばっかだった。
加えてみんな個性が強い。技術力も高い。
そんな人たちと関わるのはとても面白かった。
井の中の蛙だったことを痛感した。


そして、VGのクルーさんたちが最高。
全力でコミットしてくれた。
カッコイイオトナとはこういうことか、と思った。
私がクルーさんたちに抱いたキラキラした感情は筆舌に尽くし難い。


毎朝起きて会社に行くのが楽しみだった。


最終日

泣いた。めちゃくちゃこらえたけど無理だった。
たくさんの刺激を受けて、自分の中身が成長した証拠だと思っている。


得たもの

Treasureを通して私が得たものは、
一生の仲間と、開発に対するわくわくである。


これからもずっと大事にしていきたい。


今日からブログを書く

わたしは誰か

「パソコンとかiPhoneをいじくるのが好きだったから」
という理由で、大学入学時に情報学の世界に足を踏み入れた女子大生。


ブログを書こうと思ったきっかけ

情報学科では90%の人間が大学院に進学する。
自分もそうだと思っていた。


が、
今年の春に転機が訪れる。
同じ学科の友達にインターンにエントリーしてみようと誘われた。
「今の自分たちの実力、試してみたくない?」


それがきっかけでカイシャについていっぱい調べた。
いっぱい調べたら自分のやりたいことが見えてきた。


やりたいことに向かってやっと歩き出したのが、今、大学3回生の夏。


インターンに参加したり、友達と将来について話したりしている。
そんな日々の、自分の成長課程を記録する手段としてブログを選んだ。


どんなブログにするか

主には、開発する上で学んだことをまとめていく。
その他にも調べて勉強したことや、日記的なものも書いていこうと思う。