「Myトレ」リリースまでに身に付けた私のスキル

こんにちは。
先月、念願だった自作アプリをAppleStoreに公開できました!

今後このアプリの機能強化やバグ改修をガシガシ進めていく予定ですが、一旦ここで立ち止まり、改めて私がどんな技術を学んでたのか整理したいと思い、本記事を作成しました。

学習した技術の概要

その1 swift

iOSにてアプリ開発するのに必要とする言語です。
ほかにもObjective-Cという言語がありますが、swiftのが後続に登場した言語となっています。

上記のObjective-CもswiftもXcodeというAppleの公式開発ツール上で動作することが可能となります。
このXcodeMac上でしか動作させることができないため、iOS用のアプリ開発をするために必然とMacが必要になります。
windows上でも開発できるクロスコンパイラがあるそうですが、この記事では触れません

スマホのOSシェアという観点でいると、日本でもiOSよりAndroidのシェアが超えているという現状もありますので、
今後はAndroid開発も視野に入れて行こうと思ってます。
日本でのスマホのOSシェア、Androidが57.2%、iOSが42.8%に - iPhone Mania

Macはサイズも見た目もシンプルで好きなんですけどね笑

その2 Firebase

Firebaseはgoogleが提供するクラウドサービスであり、BaaS(Backend as a Service)のサービスを提供しています。
今回「Myトレ」のバックエンドに用意しました。

backend as a serviceという名前の通り、新しくサービスを立ち上げる上で必要なデータベース(以下DB)に対して、FirebaseのAPIを用いることでswiftから簡単にアクセスできます。

Firebase上の設定は「データベースの構造」と「セキュリティルール」の設定が必要になりますが、ここさえできてしまえば自分のアプリからアクセスできるようになります(ブラウザで設定します)。

ちなみに、udemyのとあるswiftの講義を受講してて、このfirebaseが登場してきたので今回はmyトレに使用してみました。

使用した機能

cloud firestore データベースの機能。Myトレのデータも本サービス上に格納されます!
認証 この機能が大変便利です。これがあるおかげで、gmailapple IDで自分のアプリのサービスへのログインが可能となります!

学習した技術の取得内容

  1. swift
  • udemy

 【Swift5対応】自動更新型ニュースアプリと名刺管理アプリを学ぼう!(
https://www.udemy.com/course/swift5_xcode_news/learn/lecture/14862845#overview
)

 開発環境(XCode)の立ち上げから、具体的なコーディングの話まで詰め込んでいて、swiftの初心者の私も一つアプリを作りきることができました。
 
 コードの話になりますが、UITableViewやUILabel, UIButtonなど、アプリを組む上で「絶対使うであろう」部品の使い方を説明してくれて他、前述したFirebaseとの連携するための手順、コーディング方法も紹介してくれています。

 そして、実際にサンプルとして作る画面が実用的(実際にありそうなアプリを作る)であるため、作っていて楽しかったです。

  • その他

ざっくりしてますが、
アプリの今後の拡張性や基本を理解したいと思い、以下の使用をググりながら学習しました。

CocoaPods 外部ライブラリ導入ツール
上記のudemyの講義内でも登場しますが、本ツールを用いることで外部のAPIを簡単に実装できます。FirebaseのAPIももちろんですが、アニメーションを楽に再現できるlottieも重宝しました。
VIPER iOSの開発で用いられるデザインパターン
一つの機能に対して、View, Interactor, Presenter, Routerのクラスに分けることで、クラス毎の役割を明確にすることができます。
また、クラス間へのアクセスはprotocolを介してアクセスするため、テストコードも描けるようになります。
今後のアプリの機能拡張し易くするために導入しました。
  1. Firebase
Cloud Firestore Firebaseのデータベースサービス
本データベースは「NoSQLドキュメント指向データベース」と呼称するそうです。「Myトレ」でユーザ毎のデータを管理するために、コレクション、ドキュメントの概念を抑えました。
余談ですが、データはマップ型(json型のようなものですかね)で扱うので、swift側もjsonを管理するコードをいくつか実装しました。
セキュリティ Cloud Firestoreに対するセキュリティルール実装
上記のudemyの講義ではこのセキュリティルール言語までは紹介してなかったので自力で取得しました。
ここを怠ると予期せぬケースでセキュリティを突破され自分のCloud Firestoreのリソースをめちゃくちゃにされてしまうため、ユーザ毎にアクセスできるリソースや投入できるデータの形式、認証状態等を実装しました。

最後に

2019年11月あたりから「Myトレ」の開発を行なってました。当初は半年くらいでAppleStoreに公開できたらいいなーなんて思ってましたが、なんやかんやで9ヶ月位かかりました。
具体的に何時間要したか計測できてなかったですが、VIPERのデザインパターンを取り入れたことや、FirebaseのAPI実装(Cloud Firestoreにget, create, update, deleteを発行する)、セキュリティルールの検討が大変でした(知らないことが多い状態で、一から実装してかないといけなかったので)。

とはいえ、無事一通りの機能を実装することができたので、今後はこれに対して新しい機能を追加していきたいと思ってます。

睡眠と友達になる!

睡眠を犠牲にして働くのはやめておこう。
とくに、あなたがクリエイティブな仕事をしたいのなら。

スタンフォード式 最高の睡眠」著者:西野精治の本の最後に記載されている言葉を引用しました。

今回、この本を読んで学んだことをまとめようと思います。

前回の記事で脳について触れましたが、私はドラムとプログラミングが好きでもっと時間を費やしたいです。
そのためには、1日の限られた時間の中でやりたいことに集中して取り組む必要があります。

ですが、平日で仕事が遅くなると寝てしまったり、土日でも昼寝をしてしまい気づけば数時間立っていた。。。
なんてこともありました。

ですので、この本の内容を実践する事で、1日の限られた時間のなかで自分のしたいことをしっかりやり切るようにしたいと思います。

  • 睡眠をしないとどうなる? 負債について
  • 睡眠の役割
  • 良質な睡眠を得るために必要な事
    • 良質な睡眠とは何か? 黄金の90分
    • 良質な睡眠を得るための意識すべきこと 脳と体温
    • 良質な睡眠を得るためのポイント
  • 終わりに
続きを読む

できるとき、できないとき

「なんでできないんだ怒怒!!!!!!」 

何かを取得しようとしたときや、人に教えているときなどに、そう思ってしまうときってありませんか?
僕はいままさにその状態で非常に辛い思いをしています。

プロフィールにも書いてありますが僕はドラムが好きで、現在高速にペダルを踏めるよう練習している最中です。


上に動画を載せましたが、これはできているときに撮影したものですが、いまはもう出来ません。やり方を思い出せないのです。
少し昔の話で私は学生時代卓球に謹んでましたが、ドライブを打ってよく入るときと、全く入らないときがありました。

なぜ、できるときがあってもできないようにもなってしまうのでしょうか?
→そんなこと全くないぜ!という方がいましたら羨ましい限りです…

ということで、今回はできるときできないときと言った状態はなぜ発生してしまうのか、私たち人間(人間以外も)なら誰しも所有している「脳」に着目して仕組みを調べてみました。

小脳と大脳

「体を動かすための指令は脳から電気信号として筋肉に伝わり、筋肉が収縮することで体が動く。」
といったことは一度でも耳にした方はいるかと思います。

そもそもその指令を出す脳ってどういったもので構成されているのでしょうか?

脳の構造

種類 役割 補足
大脳 精神などの高度な機能:運動を命じる、記憶や情動、認知といった精神をなどの機能を司る 哺乳類(中でも人間)が発達している
小脳 運動機能:大脳から受けた運動の命令に対して、力の強さやバランスを調整する 鳥類が発達している
脳幹 生存本能機能:生命維持に関わる、意識、呼吸、循環器系を調整する

私たちの体を動かす際に、「運動しろ!」という指令が大脳で生成されます。
その指令は小脳を経由して体の筋肉に信号が送られるのですが、小脳では大脳の指令を調整するやくわりがあるそうです。

小脳には、プルキンエ細胞という細胞が約3000万個存在しているそうです。
一つのプルキンエ細胞はたくさんの軸索が伸びていて、シナプスを介して「平行線維」とつながっています。

ファイル:Cerebellum circuit figure1.png - 脳科学辞典

この細胞の一連の繋がりのことを「小脳回路」と呼ぶそうですが、私たちは小さいころから多くの動作を取得した結果が、この小脳回路に反映されているとのことです。

ぎこちない動き、洗練された動きとは?

ぎこちない動きとは?

運動する指令は大脳から送られ平行線維を経由して小脳に送り出されると説明しましたが、「動きがぎこちない」とはどう言った状態なのでしょうか?

動きがぎこちない状態とは、「一つのプルキンエ細胞」に対して複数の平行繊維から情報をもらっている状態で、運動指令の
伝道効率が悪い「小脳回路」を形成されている状態と言えるそうです。

大脳から指令を送っているけど、情報を送る道が多すぎることで、大脳で描いた情報が思うように筋肉に届かず結果として
「ぎこちない」といった動作に繋がるそうです。

洗練されるとは?

先ほど、「ぎこちない状態」とは「伝道効率の悪さ」と説明しましたがどうすれば伝道効率が上がるのでしょうか。

プルキンエ細胞には「登上線維」というものと繋がっているのですが、間違った運動をした!と感じた場合、
登上線維からエラー信号がプルキンエ細胞シナプスに送られ、エラー信号が送られたシナプスは「抑制」されます。

つまり、身に着けたい動作の動きを繰り返すことで、平行線維と繋がるシナプスの数が限られて「伝道効率」が上がることにより、動きが洗練されていくそうです。

このシナプスが抑制される現象を「長期抑制(Long Term Depression)」と呼ばれているのですが、一度シナプスが抑制されると、長期抑制のなのごとくシナプスはつながらない状態が維持されるそうです。

例えば、一度乗れるようになった自転車を、久々に乗ったとしても「全く乗れなくなってしまった!」ということはありませんよね?

一度体で覚えた運動パターンは、長期抑制によって脳で永久保存されるためどんなにブランクがあってもできなくなることはありません。


小さい頃に自転車の練習をする中で、小脳の登上繊維がエラー信号をたくさん出してシナプスの繋がりを効率化してくれたおかげで私たちは今でも自転車に乗れているのです。

自分で指示したわけでもないのに、間違った!というエラー信号を必要なタイミングで出してくれるってほんと凄いです。

大事なこと、定着するまで繰り返す!

脳は一度定着できたことを忘れることはないのですが、何度も繰り返すことでようやく定着するそうです。
また自転車の例ですが、一度乗れるようになったあとも何度も練習を繰り返すことで当たり前のように乗れるようになると思います。

筆者も「たまたま?」理想とするペダルの踏みかたを取得しましたが、できないときがあるということ小脳がその動作の仕方を完全に理解できていない状態なんだと思います。

「大人の「運動音痴」がみるみるよくなる本」によると、覚えるためには以下のようなことが必要とのことです。
①目的を持つ:意識することで、神経パターンの定着率アップ
②繰り返す:神経パターンを脳に定着させる
③行き詰まったら休む:繰り返しても効果がない場合は休むことも大事とのことです。寝ることは脳内で情報整理する時間でもあるとのこと
④上達を客観的に確認する:間違った動作を覚えてしまわないように、定期的に自分のフォームを振り返り修正する

今の自分は「筋肉の使い方」が分からなくなってしまっているので、④により改めてペダルの動作に必要な筋肉はどこか?別の記事を参考に施行錯誤しています。
→そこを紹介しないんかーい!という突っ込みはいったんなしの方向で笑

①-④のメリットは、また別途深堀してみたいと思います。

終わりに

思うように動作を取得できない場合は、やみくもに練習するのではなくどういった筋肉が登場人物として登場するのか常に確認したいですね。
いま筋トレのタスク管理アプリを作っていますが、追々はそういったことをサポートする機能も搭載したいです。

ふと思いだしましたが、
ジブリの魔女宅にてキキが箒に乗れなくなってしまった際に、ウルスラが「書くのをやめてほかのことをする!」
みたいな発言をしてました。

決して間違っていない発言ですし、自分も行き詰ったらウルスラの顔でも思い出して休憩してみようと思います。

参考図書

・大人の「運動音痴」がみるみるよくなる本(著者:深代千之)
・プロが教える脳のすべてがわかる本(著者:岩田誠)

【初めまして!】アプリ製作に至った背景

こんにちは、池田和浩と申します!

初めてのブログ投稿です!

私は現在、「マイトレ(仮)」という筋トレのタスク管理アプリを開発しているのですが、本記事ではこのアプリを作ろうと思った「背景」についてお話ししていきたいと思います!


トピックス

  • 「記録する」という行為について
  • 「意識する」という行為について
  • 終わりに

「記録する」という行為について

プロフィールでも少し触れていますが筆者は今年で社会人6年目でして、20代もそろそろ終わろうとしています。

仕事は基本的にデスクワークのため体を動かす機会は少なく特にスポーツもしていないという状況が何年も続いてました。

社会人になってからたまに筋トレはしてたのですがどうも続かなく、例えば季節が変わり寒くなったらジムに行くのが面倒くさくなり自然消滅。。。
  
筋トレに限らないですが「継続的」に何かを続けるには、「結果」を振り返りやすいよな状況を作ることが大事であると考えています。
 

「昨日腕立てやったし、一昨日はスクワットこんだけやってたんだな。じゃあ、今日はこのトレーニングをやろう!」
 
といった具合に、過去の実績を振り返りやすい状況を作ることで、モチベーションを維持するのに役立ちます。
 
また、「記録する」といった行為は、オーバーワークによる怪我を防ぐことにも役立ちます。

超回復の理論があり、筋トレ後「48-72時間」程度の休息を与えることでより筋肉が成長するわけですが、記録しておくことでより定量的に把握することも可能となります。
 

どうやって記録するか?

さて、この「記録」ですが、皆様はどうった方法で「記録」していますでしょうか?

・ノート
・アプリ ← 筆者が作っているのも対象!
・頭 

他にもあるかもですが、こういった手段があるかと思います。
勝手に私の独断も入ってますが、ざっと特徴をまとめてみました。

メリット デメリット
ノート サッと記録できる(雑に書いても自分にわかれば良い) ・嵩張る
・グラフで成果を見ようとすると大変
 →自分で描いたり、excelなどに別途入力してあげて表を作ってあげる必要あり
アプリ ・嵩張らない(ノートよりは)
・グラフを自動で生成してくれる
フリック入力が面倒
 →筆者の市場調査が足りてないかもですので、もし良いのがありましたら教えてください!
・嵩張らない(スマホ以上に) ・忘れる
 →人間の脳は揮発性ですので信用してはなりません!
 


以前筆者は別のアプリを使っていましたが、トレーニングのインターバル中にするフリック入力することが面倒くさくてやめてしまいました。
頭で記録している時もありましたが、筆者は記憶力は決して優れてないので適当な管理になってましたね笑

やっぱ、慣れたアプリを使って記録すると良いと思います。
 

「意識」について

記録方法に関してピックアップしてみましたが、私は「記録」する行為をする上で如何にして「意識せずに記録できるか?」が大事であると考えています。

マインドマッスルコントロール(以下MMC)という単語があり、使用する筋肉を意識することでよりトレーニングの効果が得られるとのことです。

つまり、トレーニングにより成果を得たいとなる場合は、トレーニング中は筋肉に対して集中していることが必要となります。 
レーニングの種目にもよりますが、筋トレでは一つの種目に対して何度か実施します。大体セットのインターバルは30秒-60秒ってところでしょうか。
 
この短い時間の中でトレーニングに関係ない行為をしてしまったとしたら集中力が途切れてしまうので、次のセットに向けて集中力を戻す必要があります。

ちょっと小話で、一つ一つの物事を決断するという行為も集中力を妨げる要因になるとのことです。イチロー選手や五郎丸選手のルーティンは有名ですが、こう言った習慣化した行動をすることで「集中力を高める」ことに役立てているそうです」。 
ですので、トレーニングのセット間で行う「記録する」という行為も意識的に実施してしまうようでしたら、その時点で集中力が途切れてしまってると言えるのかなと思います。
 
というわけで、筆者の作るアプリには「意識せずに記録する」という思いを込めています。

音声による記録の模索

少しトレーニングと話がそれます。

脳の前頭葉には「ウィルパワー」という集中力に関する体力のようなものが存在していて、「自分を操る超集中力(著者:DaiGo氏)」によると、「ウィルパワー」は人間は物事に対して「決断」を下す際に消費されるようです。
 
ウィルパワーを消費続けることで集中力が途切れてしまうので、「ここぞ!」というタイミングでウィルパワーを使ってあげる必要があります。 
筋トレにおいては、負荷をかけているその瞬間に筋肉に対して意識を向け、休憩の間には無駄なことをしないいったことが大事になってくると思われます。
 
ですので、このセット間に「意識せずに記録する」ことが大事であると考えています。

書く、スマホをいじると言った行為はいずれも「手を動かしています」が、運動していると置き換えることができます。
手を動かして運動をすることは、それだけ「判断」の回数も増えているためウィルパワーは消費されます。
それに対して喋るという動作は、手を動かす動作に比べ、運動量も少なく「判断」する回数も少ないと思っています。

→ごめんなさい、この辺はまだ私の勉強不足で本当にそうなのか?と言われるとなんとも言えないです。ですが、現在作っているアプリにて音声による記録を試作して試した際には、フリック入力よりはるかに楽である!と感じた次第です
 

最後に

ということで、音声による記録が可能な筋トレのタスク管理アプリを作成している次第です。

アプリでは記録する以外にも「グラフで表示する機能」、「任意の種目を作成する」といった最低限必要と思われる機能も実装しています。

追々は、他の機能も追加したいと思ってますが、スマートウォッチのようなウェアラブルバイスを使用してよりノンストレスに記録ができるようなものを提供したいと考えています。
apple watchに話しかけて記録すると言ったシーンを思い浮かべてますが、スマホ以上に手軽さを演出できそうな気がしてます。そんでスタイリッシュ

 アプリのリリースは6-7月中を目標としてます。

が、私はiOSアプリ開発は初めてでして・・・

基本的な機能は完成してるのですが、リリース作業の手間取りそうと懸念してます。
とちょっと自分に保険かけちゃいましたが、なんとしてでもリリースしようと試みてます!

便利なものを提供できたらと思ってますので、リリースした暁には使っていただけたら幸いです。

機能改善要望も受け付けますし、より良いものになるよう改良し続けたいところです


そんなわけで、 ブログ初投稿でした。ここまで読んでいただきありがとうございました!