ketyiaの学んだこと議事録

このサイトでは学んだことを記事にまとめていきます

マインドフルネスで反応をコントロールしよう!

こんばんは!

皆さんは、つらいときや気持ちが落ち込んだとき、どのように対処していますか?私自身、最近は立て続けに辛いことがあり、そのたびにどう乗り越えたらいいのか分からなくなる日々が続いていました。先の見えない不安の中で、「この人生をどう生きていけばいいのか」と悩むこともしばしばです。

そんなとき、私は「マインドフルネス」という考え方に出会いました。心の在り方に目を向け、今この瞬間を意識することで、少しずつ気持ちが軽くなり、前向きに向き合えるようになるというものです。

本記事では、このマインドフルネスについて詳しく学び、日常生活でどのように取り入れられるかを一緒に考えてみましょう。

マインドフルネスとは


マインドフルネスとは、「今この瞬間に集中し、心や体の状態に気づくこと」です。過去の後悔や未来の不安にとらわれず、今に意識を向けることで、心を穏やかにし、リラックスできるようになります。

日常生活では、つい複数のことを同時に考えたり、未来への心配や過去の思い出に引っ張られることが多く、それが不安やストレスの原因になります。マインドフルネスは、そうした「思考の渦」から一歩引き、呼吸や体の感覚に意識を向けて、心を落ち着かせるための方法です。

マインドフルネスの実践方法


マインドフルネスは特別な道具や場所がなくても、日常生活の中で気軽に始められるのが魅力です。ここでは、初心者でも取り組みやすい簡単な方法をご紹介します。

1. 呼吸に意識を向ける

マインドフルネスの基本は「呼吸」です。静かな場所で目を閉じ、自然な呼吸に意識を集中させてみましょう。吸う息、吐く息を感じながら、「今、ここにいる自分」を意識します。心がさまよっても構いません。そのたびに優しく呼吸へ意識を戻すことがポイントです。

2. ボディスキャン

ベッドに横たわった状態や椅子に座った状態で、足先から頭のてっぺんまで順番に体の感覚を確認します。「足が重いな」「肩がこっているな」と気づくだけでOKです。身体に意識を向けることで、緊張をほぐし、リラックスすることができます。

3. 日常の中で「今」に集中する

例えば、食事中に一口一口の味や食感に注意を向けたり、散歩中に風や音を感じたりするだけでマインドフルネスを実践できます。「ながら作業」をやめ、一つひとつの行動を丁寧に行うことが、心を整える第一歩です。

マインドフルネスを続けるためのポイント


完璧を求めない

最初はなかなか集中できなかったり、心が雑念に引っ張られることもあるでしょう。それで構いません。大切なのは、自分を責めずに「今に戻る」ことです。

毎日少しずつ取り入れる

一度に長時間取り組む必要はありません。1日5分でもいいので、継続してみてください。習慣化することで、心の平穏を感じる時間が自然と増えていきます。

感謝の気持ちを持つ

毎日の終わりに、その日良かったことや感謝できることを思い返してみましょう。小さな喜びに気づくことも、マインドフルネスの一環です。

 

忙しい日々の中で、ほんの少しでも「今」に目を向けてみませんか?
それが、より穏やかな心で日々を過ごす第一歩になるかもしれません。

最後まで読んでいただきありがとうございます!

記憶について心理学の観点から調べてみた

こんばんは!

突然ですが、皆さんは「もっと記憶力があれば…」と思ったことはありませんか?私も日々そう感じています。しかし、記憶力を高めるのは簡単ではなく、特別なトレーニングや工夫が必要です。

そこで今回は、記憶がどのように作られ、定着していくのかを心理学的な観点から分かりやすく解説していきたいと思います。

記憶が作られる流れ


1. 注意

記憶が形成される最初のステップは「注意」です。私たちが日々の中で目にしたり耳にしたりする情報は膨大ですが、すべてを覚えることはできません。そのため、脳は「必要な情報」に集中する仕組みを持っています。この「集中力」ともいえる注意が、記憶がつくられるきっかけになります。

たとえば、誰かと会話している時に相手の言葉やジェスチャーに意識を向けていると、その会話内容を記憶しやすくなるのはこのためです。

2. 感情

次に、私たちが記憶するものには「感情」が大きく影響します。楽しかった出来事や驚いた瞬間、悲しかった体験など、強い感情を伴う経験は記憶に残りやすく、長期的に覚えていることが多いです。これは、脳の「扁桃体(へんとうたい)」という部分が、感情に関連した情報を強化して記憶に刻み込むためです。

たとえば、大切な人と特別な日に過ごした時間や、初めての経験(初めて会った人や行った場所など)は、感情的な反応が大きいため、記憶に残りやすくなります。

3. 感覚

記憶はまた「感覚」とも強く結びついています。私たちの五感(視覚、聴覚、嗅覚、触覚、味覚)は、情報をキャッチして脳に送り、記憶を形成する材料となります。たとえば、特定の香りや味があると、そのときの出来事や感情がふっとよみがえることがあります。このように、感覚を通して得られた情報は、記憶に深く影響を与えます。

4. 短期記憶

情報に注意を払い、感情や感覚を伴って脳にインプットされると、「短期記憶」として一時的に保存されます。この短期記憶は、数十秒から数分ほど持続しますが、長くは続きません。たとえば、誰かに電話番号を教えられ、そのまま一時的に覚えているのも短期記憶の働きです。

5. 海馬による処理

短期記憶として保存された情報のうち、必要と判断されたものは脳の「海馬(かいば)」でさらに処理されます。海馬は、情報を長期記憶へと変えるための重要な役割を担っており、情報を整理し、必要に応じて繰り返し復習することで、記憶をより確実なものにしていきます。

6. 固定化

最後に「固定化」というステップで、情報は長期記憶として脳に保存されます。この固定化の過程では、眠っている間の脳の働きが重要です。特に深い眠りの段階で、脳はその日に得た情報を整理し、必要な記憶を脳全体に定着させます。こうして、情報は長期的に忘れにくくなるのです。

記憶の種類


1. エピソード記憶

エピソード記憶は、具体的な「出来事」や「経験」に関する記憶です。たとえば、「去年の旅行で行った場所」や「友人と過ごした誕生日の夜」といった、個人的な体験やその場で感じたことが含まれます。この記憶は「いつ」「どこで」「何があったのか」といった時間や場所に基づいた情報を含むのが特徴で、自分の人生に関するエピソードが記録される記憶です。

2. 意味記憶

意味記憶は、言葉の意味や事実、一般的な知識に関する記憶です。たとえば、「地球は丸い」「犬は哺乳類である」「1年は12か月ある」など、個人的な経験に依存せずに誰でも知っているような情報がこの記憶に含まれます。エピソード記憶が具体的な出来事に結びつくのに対し、意味記憶は事実や概念の記憶で、知識や教養のもとになるものです。

3. ワーキングメモリー

ワーキングメモリーは、情報を一時的に保持し、操作するための記憶です。「作業記憶」とも呼ばれます。たとえば、「会議での内容を頭に入れておきながらメモを取る」「頭の中で数字を暗算する」など、今必要な情報を短期間保持して使うための記憶です。ワーキングメモリーは情報処理の中心として機能し、判断や問題解決、学習などの場面で欠かせません。

4. 手続き記憶

手続き記憶は、体の動きや技術に関する記憶で、スポーツや楽器の演奏、車の運転のように、身体で覚えるスキルに関係します。手続き記憶は、一度身に付けると忘れにくく、再び練習しなくても自然に体が動くのが特徴です。例えば、自転車の乗り方やタイピングなど、経験を通して身についた動作や行動パターンが含まれます。

5. 潜在記憶

潜在記憶とは、意識的に思い出そうとしなくても、無意識のうちに影響を及ぼす記憶のことです。たとえば、日常でふと聞こえた音楽が頭に残っている、広告の内容が自然に記憶されていて商品に興味を持つようになる、といった現象が潜在記憶にあたります。潜在記憶は、気づかないうちに私たちの判断や行動に影響を与える記憶で、習慣や行動パターンの背景に存在することが多いです。

簡単にですがここまでとします。
何かを学ぶときはただ単に学ぶのでなく、何か感情とかを利用するとうまくいくかもしれませんねw

ここまで読んでいただきありがとうございます!

レガシ―コードからの脱却を読んでみた!!

レガシ―コードからの脱却を読んでみた!!

こんにちは!

コードをきれいに効率的に書く。
やらなければいけないことですが、とても難しいことです。時間をかければできるかもしれません。ただ、業務になると時間との勝負であり実現することは困難です。私レベルですと。。

なので、学びます。
下記の本を参考にしました。

レガシーコードとは


レガシーコードとは、一般的に以下のような特徴を持つコードのことを指します。

テストがない

自動化されたテストが存在しないため、変更が難しく、バグが発生しやすい。

依存関係が多い

他のコードやシステムに強く依存しているため、変更が困難。

可読性が低い

コードが複雑で理解しにくく、ドキュメントも不足していることが多い。

古い技術や手法を使用

最新の技術やベストプラクティスが適用されていない。

これらの特徴により、レガシーコードは保守や拡張が非常に難しく、開発者にとって大きな負担となります。また、この非効率による失敗でとてつもない損額が発生していることがCHAOSレポートによっても明らかになっている。

やり方より先に目的、理由、誰のためかを説明する


やり方より先に「目的」「理由」「誰のためか」を説明することで、プロジェクトやタスクの方向性が明確になり、チーム全体の理解と協力が得られやすくなります。これにより、プロジェクトの成功率が高まり、より効果的な成果を得ることができます。

1. 目的

目的を明確にすることで、プロジェクトやタスクの最終的なゴールがはっきりします。これにより、チーム全体が同じ方向を向いて努力することができます。

2. 理由

理由を説明することで、なぜそのプロジェクトやタスクが重要なのかを理解できます。これにより、チームメンバーのモチベーションが高まり、プロジェクトに対するコミットメントが強くなります。

3. 誰のためか

誰のためかを明確にすることで、プロジェクトやタスクの成果が誰にどのような影響を与えるのかを理解できます。これにより、ユーザーやステークホルダーのニーズに応じた最適な解決策を提供することができます。

小さなバッチを作る


「小さなバッチで作る」というプラクティスは、ソフトウェア開発において大きな機能やタスクを小さな部分に分割して進める方法です。これにより、開発プロセスがより効率的で柔軟になり、リスクを減らすことができます。

小さなタスクに分割

大きな機能やプロジェクトを小さなタスクに分割します。これにより、各タスクが管理しやすくなり、進捗状況を把握しやすくなります。

頻繁なリリース

小さなバッチで作業を進めることで、頻繁にリリースすることが可能になります。これにより、ユーザーからのフィードバックを早期に得ることができ、必要な修正を迅速に行えます。

リスクの軽減

小さなバッチで作業を進めることで、問題が発生した場合でも影響範囲が小さくなります。これにより、迅速に問題を特定し、修正することができます。

継続的な改善

小さなバッチでの作業は、継続的な改善を促進します。各リリースごとにフィードバックを受け取り、次のリリースに反映させることで、製品の品質を向上させることができます。

継続的な統合


継続的インテグレーション(CI)は、ソフトウェア開発において、開発者が書いたコードを頻繁にメインのコードベースに統合するプロセスです。これにより、コードの変更が小さな単位で行われ、問題の早期発見と修正が可能になります。

頻繁な統合

開発者は自分のコード変更を頻繁に(通常は1日1回以上)リポジトリにマージします。これにより、統合の際に発生する競合やバグを早期に発見できます。

自動化されたビルドとテスト

CIでは、コードがリポジトリにマージされるたびに自動的にビルドとテストが実行されます。これにより、コードの品質を保ちつつ、バグの早期発見が可能になります。

フィードバックの迅速化

自動化されたプロセスにより、問題が発生した場合にはすぐに開発者にフィードバックが返されます。これにより、迅速な対応が可能になります。

リリースサイクルの短縮

CIを導入することで、リリースサイクルが短縮され、頻繁に新しいバージョンをリリースすることが可能になります。これにより、ユーザーからのフィードバックを早期に得ることができます。

協力しあう


協力しあうプラクティスには、チームメンバーが共同で作業を進めるためのさまざまな方法があります。

ペアプログラミング

ペアプログラミングは、二人の開発者が一緒にコードを書く手法です。一人が「ドライバー」として実際にコードを書き、もう一人が「ナビゲーター」としてコードをレビューし、提案を行います。この方法は、以下のようなメリットがあります

コード品質の向上

ナビゲーターがリアルタイムでコードをチェックするため、バグやミスが減少します。

知識の共有

異なる視点やスキルを持つ二人が協力することで、互いの知識や技術が向上します。

迅速な問題解決

二人で問題に取り組むため、解決が早くなります。

CLEANコード


凝集性

関連する機能やデータを一つのモジュールやクラスにまとめること。
例: ユーザー認証に関する機能を一つのクラスにまとめることで、コードの理解と保守が容易になります。

疎結合

モジュールやクラス間の依存関係を最小限にすること。
例: インターフェースを使用して、異なるモジュール間の依存を減らし、変更の影響を最小限に抑えます。

カプセル化

データやメソッドをクラス内に隠蔽し、外部から直接アクセスできないようにすること。
例: クラスのプロパティをプライベートにし、必要な場合のみ公開メソッドを通じてアクセスさせます。

断定的

コードが明確で一貫性があり、意図がはっきりしていること。
例: メソッド名や変数名を意味のあるものにし、コメントを適切に追加してコードの意図を明確にします。

非冗長

重複したコードを避け、シンプルで効率的なコードを書くこと。
例: 共通の処理をメソッドにまとめ、再利用することでコードの重複を減らします。

まずテストを書く


コードを書く前にテストを作成することも役に立ちます。例えば、新しい機能を追加する前に、その機能が正しく動作するかどうかを確認するためのテストケースを作成します。

利点


バグの早期発見

コードを書く前にテストを作成することで、バグを早期に発見しやすくなります。

リファクタリングの安心感

テストがあることで、コードのリファクタリング(改善)を行う際に、既存の機能が壊れていないかを確認できます。

ドキュメントとしての役割

テストケースは、コードの仕様や期待される動作を示すドキュメントとしても機能します。

実践方法


小さなステップで進める

一度に大きなテストを書くのではなく、小さな機能ごとにテストを作成し、段階的に進めます。

ふるまい駆動開発


テストを通じてシステムのふるまいを明確にする手法です。BDDでは、テストケースをユーザーの視点から記述し、システムがどのように動作するべきかを示します。例えば、「ユーザーがログインボタンをクリックしたとき、正しい資格情報が入力されていれば、ダッシュボードページにリダイレクトされるべき」というテストケースを作成します。

利点


明確な仕様

テストケースがシステムの仕様を明確に示すため、開発者間のコミュニケーションが円滑になります。

バグの早期発見

ふるまいを明示することで、期待される動作と実際の動作のギャップを早期に発見できます。

実践方法


Given-When-Then形式

テストケースを「前提条件 (Given)」「操作 (When)」「期待される結果 (Then)」の形式で記述します。

設計は最後に行う


最初から詳細な設計を行うのではなく、実際の開発プロセスを通じて設計を進化させることがプラクティスに挙げられてます。例えば、プロジェクトの初期段階では大まかな設計に留め、実際のコーディングやテストを通じて設計を改善していきます。

利点


適応性の向上

要件や技術的な変更に柔軟に対応できるようになります。

実際のニーズに基づく設計

実際の使用状況やフィードバックを反映した設計が可能になります。


実践方法

反復的なアプローチ

開発サイクルごとに設計を見直し、必要に応じて改善を行います。

テスト駆動開発 (TDD)

テストを先に書くことで、設計が自然と進化し、必要な機能に焦点を当てた設計が行われます。

レガシーコードをリファクタリングする


1. ピンニングテスト

ピンニングテストは、既存のコードの動作を固定するためのテストです。これにより、リファクタリング中にコードの動作が変わらないことを確認できます。まず、現在の動作をテストでキャプチャし、その後の変更が意図しない影響を与えないようにします。

2. 依存性の注入

依存性の注入は、コードの依存関係を外部から注入することで、テストやメンテナンスを容易にする手法です。これにより、モジュール間の結合度が低くなり、個々のコンポーネントを独立してテストできるようになります。

3. ストラングラーパターンと抽象化ブランチ

ストラングラーパターンは、古いシステムを段階的に新しいシステムに置き換える方法です。まず、新しい機能を新しいシステムに実装し、徐々に古いシステムの機能を移行します。抽象化ブランチは、コードの一部を抽象化して新しい実装に切り替えるための技術です。これにより、リファクタリングの影響を最小限に抑えながら、段階的に改善を進めることができます。

4. オープンクローズド原則に基づくリファクタリング

オープンクローズド原則は、ソフトウェアエンティティ(クラス、モジュール、関数など)は拡張に対して開かれており、修正に対して閉じているべきという原則です。これを実現するためには、既存のコードを変更せずに新しい機能を追加できるように設計します。例えば、インターフェースを使用して新しい機能を追加することで、既存のコードに影響を与えずに拡張できます。

これらのプラクティスを実践することで、以下のような価値を得ることができます

コードの信頼性向上

ピンニングテストや依存性の注入により、コードの動作が安定し、バグの発生を防ぎます。

メンテナンス性の向上

依存性の注入やオープンクローズド原則に基づく設計により、コードの変更が容易になります。

段階的な移行

ストラングラーパターンと抽象化ブランチを使用することで、システム全体を一度に変更するリスクを避け、段階的に改善を進めることができます。