### 概要
テキストや画像、動画などの投稿、プライベートチャットを楽しめるSNSウェブアプリケーションの個人開発を行いました。
### URL
https://ten.yuki-gakiya.com/
### リポジトリ
https://github.com/AkinoJoey/SocialNetworkingService
### 作成した目的
このSNSウェブアプリケーションの制作は、これまでの学習やプロジェクト作成を通じて得た知識とスキルを活かし、より大規模なプロジェクトに取り組むことを目指して始めました。独自のマイクロフレームワークを使用し、ゼロからアプリケーションを構築することで、将来的にどのようなバックエンドフレームワークを学習する際にも役立つスキルセットを身につけることを意図しています。
MVC(Model-View-Controller)アーキテクチャを採用し、データベースの管理にはマイグレーションベースを採用しました。また、データベースへのアクセスにはDAO(Data Access Object)を利用しています。
特にセキュリティへの取り組みには重点を置き、以下のセキュリティ対策を実装しました。
- セッションベースのユーザー認証
- ユーザー入力のバリデーション
- プリペアドステートメントの使用
- テキストの暗号化
- CSRF(Cross-Site Request Forgery)対策
- 署名付きURLの発行
- Eメールの検証
### 実装した機能
#### アカウント
- アカウント作成
- Eメール認証
- ログイン
- プロフィール画像、年齢、場所、自己紹介などのプロフィール作成
- アカウントの削除
- パスワードのリセット
#### 投稿
- テキストの投稿
- 画像の投稿
- 動画の投稿
- 投稿の削除
- 日付・時間指定による予約投稿
#### ユーザーとのコミュニケーション
- ダイレクトメッセージ
- フォロー中、トレンド別のタイムライン表示
- ユーザー名、アカウント名でのユーザー検索
- 投稿に対するいいね機能
- 投稿への返信
#### 通知
- 自分の投稿への返信
- 自分の投稿へのいいね
- フォロー
- ダイレクトメッセージの受信
### 使用技術
#### フロントエンド
| 項目 | 内容 |
|---------------------|------------------------------|
| 使用言語 | HTML, CSS, Javascript |
| CSSフレームワーク | Tailwind |
| Tailwindライブラリ | flowbite, daisyUI |
| 日付選択ライブラリ | Flatpickr |
| リアルタイム通信 | WebSocket |
| パッケージ管理 | npm |
| モジュールバンドラー | webpack |
#### バックエンド
| 項目 | 内容 |
|---------------------|------------------------------|
| 使用言語 | PHP |
| データベース | MySQL |
| ジョブ管理ツール | cron |
| 単体テスト | PHPUnit |
| メール送信 | PHPMailer |
| リアルタイム通信 | Ratchet |
| プロセス制御システム | Supervisor |
| 画像編集 | ImageMagick |
| 動画編集 | ffmpeg |
| 日付操作 | Carbon |
| ダミーデータ | Faker |
| ダミー画像 | Pixabay API |
| パッケージ管理 | Composer |
| オートローダー | Composer |
| Webサーバー | NGINX |
| サーバー | Amazon EC2 |
| SSL/TLS証明書更新 | Certbot |
## 工夫した点
- 署名付きURLによる検証、ミドルウェアによるアクセス制限、ユーザー入力の検証などによるセキュリティ対策
- cronによる定期スケジューリングの実行
- Web Socketを導入して非同期チャットメッセージ機能を実装