/my-wiki

ブックマークをタブを付けて保存、mdでかいた文章をタブをつけて保存

Primary LanguagePHP

sundlf

リンク

sundlf.com

目次

概要

ブックマークやメモをタグをつけて保存する。

何ができるか

  • メモをmarkdown形式でかいて保存できる
  • ブックマークを保存できる
  • メモ、ブックマークにタグをつけられる
  • メモ、ブックマークをタグで絞ったり、並び順を変えるなどして検索できる
  • chromeの拡張機能を使ってアプリを開かずともブックマークを保存できる

デモ

メモ新規作成

default.mp4

タグのつけ外し

default.mp4

メモ編集

default.mp4

メモ閲覧

default.mp4

メモ削除

default.mp4

検索

default.mp4

並べ替え

default.mp4

ブックマークの保存、新規タグの作成

アドオンを使ったやり方が圧倒的に便利なのでこの方法で保存する人は少ないと思う

default.mp4

アドオンを使ったブックマークの保存

むしろこのやり方を推奨している

default.mp4

制作背景 なぜ作ったのか

  • laravelとvueを組み合わせた何かを作りたかった。
  • chromeのブックマーク機能に不満があった。
    • 探しにくい、整理がしにくいと思った
  • qiitaのストック機能に不満があった。
    • ストック名の数が増えるとストック名を探しにくい
    • ストック名が重複してしまう
  • 保存したブックマークなどをランダムに表示する機能が欲しかった

開発メモ

すごく雑 https://github.com/s19013/my-wiki/tree/main/dev_memo

この作品をもとに書いた記事

エンジニアになれないへっぽこな私が実装したタグをつける機能とタグの検索機能(n番煎じ)

個人開発物のデータベース構造の変化とそうした理由

使った技術

  • php
  • phpUnit
  • laravel
  • laravel breeze
  • laravel sanctum
  • vue.js
  • vuex
  • vuetify
  • inertia
  • javascript
  • html
  • css
  • aws
  • lightsail
  • apach
  • mariaDB

使っていたがやめた技術

  • gcp
  • computer engine

よくある質問集

Q:これを使うメリットは?

A:タグを付けて保存するので以下の2点がメリットとなる

  • ただタイトル名を検索するよりも探しやすくなる。
  • フォルダで管理するブックマークに比べて、より詳細に整理ができる。

Q:これの欠点は?

A:以下の2点

  • ユーザーがタグをうまく使いこなせなければ帰って使いにくいアプリとなってしまう。
    • ユーザーの能力に依存してしまう。
  • 検索機能がまだ不十分

Q:なぜ、わざわざランダムで表示する機能を付けたのか

A:短く言えば偶然でもユーザーの目に触れてもらえれば何かしらのきっかけになると思うから。
良いサイトでもたまに見返さないと忘れてしまうので、ランダムで表示されれば見返すきっかけになると考えた。
特に最近保存した情報でもなければ、かなり昔に保存した情報でもない場合は検索画面にトップ当たりに表示されにくく埋もれてしまうと思っている
それをランダムを使うことで回避できるのではと考えたから。

Q:laravelを使った理由は?

A:現段階で私がサーバーサイド言語でまともに使える言語がphpしかなかったため。
rubyよりもlaravelを採用している会社が若干多かったため

Q:vueを採用した理由は?

A:laravelと組み合わせて開発されることが多いため
reactよりも難易度が低いらしいため
vueを勉強すればreactも理解できるという話をきいたため

Q:一度gcpを採用した理由は?

A:awsもしくは、gcpを採用している会社が多く、awsは前回使ったので今回はgcpを使って見ようと思った。

Q:結局awsに戻した理由は?

A:gcpの無料期間がawsよりも短かったから。
awsのほうがgcpよりも安かったため。

Q:spa認証を採用した理由は?

A:別のトークンを発行せず、クッキーを使って通信するのでこちらのほうが簡単ではと考えたから。
スマホアプリを作る予定はないため

Q:awsとqcpの両方を使ってみた感想は?

A:※一部機能の一部しか触ってない,どちらも触り始めたばかりの人間の意見として聞いて頂きたい
awsにはlight sailというあらかじめlamp環境が用意されているサービスがあるためお手軽さはawsの方が上かもしれない
ただ、laravel単体だったらgcpのとあるサービス(サービス名は忘れました)に上げるだけで良いという利点がある
awsのドメイン発行機能とgcpのドメイン発行機能ではawsのほうが最安値が安い
awsは無料期間が1年なのに対し、gcpは3ヶ月のみ

アプリの機能

  • ユーザー登録
  • ログイン、ログアウト
  • ブックマーク
    • 作成
    • 検索
      • ソート機能
    • 編集
    • 削除
  • メモ
    • 作成
    • 一時保存
    • 検索
      • ソート機能
    • 閲覧
    • 編集
    • 削除
  • タグ
    • 作成
    • 検索
    • 編集
    • 削除
  • 拡張機能用api

他にやったこと

苦労したところ 頑張ったところ

  • とある目的を達成するために自作コンポーネントを作っていたが。わざわざ自作コンポーネントをつくらなくても達成できるとわかり。無駄な時間を浪費してしまったこと。
  • たまにスクロールバーがあらわないバグがあってそのバグが起こる原因を探る部分と解決方法
  • フロントがlaravelではなくvueなので、laravelのpaginationが使えなかったので自分で実装したところ
  • 一定条件下で更新したメモなどを更新しようすると更新できないバグが起こる原因を探る部分と解決方法
  • metaタグ,ogp周り
    • jsだけではクローラーがうまく反応してもらえないので、一度基礎部分をlaravel側で出力して必要に応じてjsで書き換えるようにした。
    • ここにたどり着くまでにかなりの時間がかかった。
  • クローラーの仕様
    • $_SERVER['HTTP_ACCEPT_LANGUAGE']という変数を使ってユーザーの使用言語を取得していたが、クローラーではここでエラーが出てしまう。そのせいで、サーチコンソールにインデックスが登録されないし、ogpが表示されない。
    • ここにたどり着くまでにかなりの時間がかかった。
  • デプロイはまだなれていない
  • タグで絞り込み検索する時のsql文
  • spa認証の実装
  • コードの中の''の中は自動補完がきかないのでそこでの書き間違いによるバグが多々あった
  • laravelのテストコードの書き方
  • ssl化 他多数

反省

  • inertiaのいいところを活かせていないと思う
  • git commitの頻度が低くてctrl+zを連打するような場面が多かった
  • 頭に入っている情報が断片的だとわかった。もう一度技術書や学習サイトなどで体型的に学び治す必要がある
  • transitionが全体的にわからない
  • それなりに計画は立てていたが結局行き当たりばったりになった
  • 最初に設計書は作ってはいたが、設計書が穴だらけだったり書き直しなどが多くなって,最終的に設計書は書かなくなってissueなどで管理するようになった
  • あれが必要、これが必要と後になってわかって出戻りがたくさんあった
  • 苦労というよりは時間がかかってしまったことがきになる
  • .envは初期はgitで追跡されないが追跡しないといつどこを変えたかわからなくなるので追跡させたほうが良いかもしれない
  • inertiaを今回で初めて触ったのでinertiaを理解するところ
  • いつのまにかmainブランチで開発していた
  • spaのようなmpaのような中途半端なものができてしまった。
  • テストでは更新したメモなどを再度更新するテストがなかったのでバグに気づかなかった 他多数

理解が曖昧なところ

  • viteの設定
  • spa認証
  • .envの書き方
  • inertia
  • apache
  • セキュリティ
  • laravelのもっと深いところ
  • vueのもっと深いところ
  • v-formのprevent
  • テスト
  • ssl
  • インフラ周り 他多数

今後追加(改善)したい機能

詳細はissue

  • メモ、ブックマーク登録、編集
    • markedでは機能が不十分に感じるので他のパッケージを探す
      • 引用の書き方が反映されない
    • フロント側でタグ情報をキャッシュしてタグなどの検索を早くする
  • メモやブックマークの検索
    • 検索オプション追加
    • 日時で絞り込む
    • 検索などで何もヒットしなかった時のメッセージを表示させる
    • タグなしのブックマーク、メモを検索できるように
  • その他
    • メモを任意で公開する機能
    • メール変更機能
    • お知らせ通知機能
    • コンポーネント化できそうなものが多いのでコンポーネント化する
    • ほぼ同じことしてる部分があるのでまとめる(かえって読みにくいコードになるのではないかと心配?)
    • メンテナンス中に表示する画面の作成
    • フロント側のテスト(環境をうまく構築できなかったため一旦断念)

もっと知りたくなったら

もう少し色々書いてあるreadmeはこちら