tag:crieit.net,2005:https://crieit.net/tags/%E3%83%A1%E3%83%A2/feed 「メモ」の記事 - Crieit Crieitでタグ「メモ」に投稿された最近の記事 2021-11-29T16:12:33+09:00 https://crieit.net/tags/%E3%83%A1%E3%83%A2/feed tag:crieit.net,2005:PublicArticle/17794 2021-11-29T16:12:33+09:00 2021-11-29T16:12:33+09:00 https://crieit.net/posts/home-url-get-template-directory-uri-get-stylesheet-directory-uri-WordPress home_url、get_template_directory_uri、get_stylesheet_directory_uriの違い【WordPress勉強備忘録】 <h2 id="home_url"><a href="#home_url">home_url</a></h2> <p>サイトのURL<br /> 例)https://example.com/</p> <h2 id="get_template_directory_uri"><a href="#get_template_directory_uri">get_template_directory_uri</a></h2> <p>親テーマディレクトリまでのURL<br /> 例)https://example.com/wp-content/themes/xxx/</p> <h2 id="get_stylesheet_directory_uri"><a href="#get_stylesheet_directory_uri">get_stylesheet_directory_uri</a></h2> <p>子テーマディレクトリまでのURL<br /> 例)https://example.com/wp-content/themes/xxx-child/</p> みみみみみ tag:crieit.net,2005:PublicArticle/17277 2021-05-25T16:54:10+09:00 2021-05-25T16:54:10+09:00 https://crieit.net/posts/OWASP-ZAP OWASP ZAPで脆弱性診断を行う際の、予備知識的なもの─ローカルプロキシの設定編 <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>OWASP ZAPを使って脆弱性診断を行う際、色んなサイトを参考にしながら進めていますが<br /> よくわからない箇所もとりあえず「そういうものなんだなー」と深く考えず、書いてあるとおりに行っていました。</p> <p>今回はそこを「それってなんズラなんズラ?」とツッコみつつ、<br /> なんとなく、ざっくり、ゆる~く 見ていこうかなと思います。</p> <p>なお、手順は<a target="_blank" rel="nofollow noopener" href="https://qiita.com/aikasu/items/6bfd33967448136b93bc">こちら</a>に沿って進めていきますが、<br /> 触れるのは冒頭の「ローカルプロキシの設定」のみとなっています。</p> <h1 id="プロキシ"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7">プロキシ</a></h1> <p>手順によるとまず最初に、</p> <blockquote> <p>OWASP ZAPをプロキシとして使用することで診断対象サイトへリクエストを送信し、そのレスポンスから脆弱性を診断します。</p> </blockquote> <p>とありますね。<br /> 私はまだ赤ちゃんなのでそもそもプロキシってなんやねんレベルです。プロ棋士??ひふみん????</p> <h2 id="プロキシはブラウザとサーバの仲介人的ポジション"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%AF%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A8%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BB%B2%E4%BB%8B%E4%BA%BA%E7%9A%84%E3%83%9D%E3%82%B8%E3%82%B7%E3%83%A7%E3%83%B3">プロキシはブラウザとサーバの仲介人的ポジション</a></h2> <p>まずは<a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1752.html">わわわIT用語辞典</a>さんを読んでみます。<br /> マジいつもお世話になってます。</p> <p>簡単説明をそのまま引用すると、</p> <blockquote> <p>ホームページを見るときに使うソフト(Webブラウザ)の身代わりになってホームページにアクセスしてくれるコンピュータ(サーバ)のこと</p> </blockquote> <p>らしい。ほほーう。</p> <p>以下、書いてあったことほぼそのままですが、</p> <h5><del>プロ棋士</del>プロキシが居ないとき</h5> <p><a href="https://crieit.now.sh/upload_images/5410c8c78b63e2daeba20552c322f97960ab648d2a215.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5410c8c78b63e2daeba20552c322f97960ab648d2a215.png?mw=700" alt="image" /></a></p> <p>ってなるところが、</p> <h5 id="プロキシが居るとき"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%8C%E5%B1%85%E3%82%8B%E3%81%A8%E3%81%8D">プロキシが居るとき</a></h5> <p><a href="https://crieit.now.sh/upload_images/19eb7c013188633f8a300785fc00457f60ab6643b1d18.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/19eb7c013188633f8a300785fc00457f60ab6643b1d18.png?mw=700" alt="image" /></a></p> <p>こんな感じに間に挟まってくれる。</p> <h2 id="プロキシの何が良いの?"><a href="#%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%AE%E4%BD%95%E3%81%8C%E8%89%AF%E3%81%84%E3%81%AE%EF%BC%9F">プロキシの何が良いの?</a></h2> <p>アクセス元を隠せる、レスポンスが早い、などありますが、今回の脆弱性診断に関係ありそうなのは<br /> サーバに送ったリクエスト内容を見たり変更したりすることが出来る ということですかね。<br /> (厳密には使わなくても出来るけど、より簡単に出来るってことかも)</p> <h2 id="なるほど。で、つまりは?"><a href="#%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%E3%80%82%E3%81%A7%E3%80%81%E3%81%A4%E3%81%BE%E3%82%8A%E3%81%AF%EF%BC%9F">なるほど。で、つまりは?</a></h2> <p>「OWASP ZAPをプロキシとして使用して、ブラウザさんとサーバくんの間に入ってもらおう。<br /> そして、プロキシちゃんを使ってリクエスト内容を変更してPOSTしまくることで、脆弱性を見つけていこうZE!」</p> <p>…めっちゃざっくりいうと、こういうことなんだろうなと、ひとまず理解。</p> <h1 id="次いってみよーーう"><a href="#%E6%AC%A1%E3%81%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%83%BC%E3%83%BC%E3%81%86">次いってみよーーう</a></h1> <p>よおし!プロキシちゃんのことが少しわかったことだし、設定に進むぞ!<br /> 手順によると…</p> <blockquote> <p>Address欄には「localhost」、ポート欄には任意のポート番号(他と競合しない番号)を入力</p> </blockquote> <p><a href="https://crieit.now.sh/upload_images/6aaea3e4da676ec504a2979c126fd92460ab7109ca9fd.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6aaea3e4da676ec504a2979c126fd92460ab7109ca9fd.jpg?mw=700" width="50%"></a></p> <h1 id="localhost(127.0.0.1)"><a href="#localhost%28127.0.0.1%29">localhost(127.0.0.1)</a></h1> <p>脆弱性診断とか関係なくよく見ますね。XAMPPでローカルサーバ立ち上げたときとか。<br /> けど説明しろって言われたら何なのかはわからないので調べてみます。</p> <h2 id="ズバリ、localhost=自分のPCのこと です!"><a href="#%E3%82%BA%E3%83%90%E3%83%AA%E3%80%81localhost%EF%BC%9D%E8%87%AA%E5%88%86%E3%81%AEPC%E3%81%AE%E3%81%93%E3%81%A8%E3%80%80%E3%81%A7%E3%81%99%EF%BC%81">ズバリ、localhost=自分のPCのこと です!</a></h2> <p>ってよく色んなところに書いてあるけどいまいちピンとこない。<br /> まずはIPアドレスについて理解していく必要がある!<br /> 頭が痛くなってきたぞぅ。</p> <h2 id="IPアドレス"><a href="#IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9">IPアドレス</a></h2> <p>「インターネット世界での住所」みたいによく説明されてますね。<br /> 前提として、すべてのwebサイトにはIPアドレスを持っています。<br /> 住所不定のホームレスwebサイトなんてものは存在しないわけですね。</p> <h3 id="じゃあURLってなんなのさ"><a href="#%E3%81%98%E3%82%83%E3%81%82URL%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%AA%E3%81%AE%E3%81%95">じゃあURLってなんなのさ</a></h3> <p>脆弱性診断をやろうとしてる人なら既にわかってるとは思いますけども、<br /> webサイトってIPアドレスで開くこともできちゃいますよね。<br /> まさに開発環境なんかは、<code>192.168.0.15</code>みたいにIPアドレスを入力して開いていたりするわけで。</p> <p>つっても普段はIPアドレスじゃなくて<code>https://www.google.com</code>っていうURLでwebページを開きますよね。<br /> <code>google.com</code>の部分が所謂<code>ドメイン</code>なのですが、このドメインはIPアドレスと一対一の関係にあります。</p> <ul> <li>IPアドレス→コンピュータさん向けのもの</li> <li>ドメイン →人間様向けのもの</li> </ul> <p>と言った感じです。</p> <p>ちなみに<code>www</code>の部分は<code>ホスト名</code>というらしい。</p> <h2 id="グローバルIPとプライベートIP"><a href="#%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABIP%E3%81%A8%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88IP">グローバルIPとプライベートIP</a></h2> <p>IPアドレスには、さらにグローバルIPとプライベートIPの2つが存在するらしい。<br /> 更に頭が痛くなってきた!</p> <h3 id="グローバルIP"><a href="#%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%ABIP">グローバルIP</a></h3> <p>全世界のネットワーク上における住所みたいなもので、重複しないIPアドレスのことです。<br /> 自分の家の住所とすぐお隣の人の住所が全く同じ、みたいなわけのわからんことになったら困りますよね。<br /> UberもAmazonも届かなそう。そんなイメージ。</p> <p>世の中に公開されているwebページのIPアドレスは、全部このグローバルIPです。<br /> そりゃそうですよね、Googleと同じIPが複数あったらカオスなことになります。</p> <h3 id="プライベートIP"><a href="#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88IP">プライベートIP</a></h3> <p>組織内のネットワーク(ローカルネットワーク?)内で使用できる、自分で勝手に決めてOKなIPアドレスのこと。<br /> 同じネットワークの中にいる人達だけに意味が伝わる、仲間内のみに通用する住所的な感じだと思います。</p> <p>マンションAに住んでいる人に、「これ1階のエントランスホールの管理人に渡しといて~」というのは通じますが、<br /> そのへんにいたオッさんに同じことを言っても「は?」って言われますよね。1階のエントランスホールって、どこの1階やねんと。</p> <p>そもそも、「1階のエントランスホール」っていうのはマンションAだけにあるものではないですよね。<br /> マンションBにもCにもあるかもしれません。</p> <p>でもマンションA内に「1階のエントランスホール」が複数あったらちょっと変ですよね。<br /> (エントランスが2つある構造とか、そういう話じゃないよ)<br /> マンションAの中に「202号室の佐藤さん」が複数あったらおかしい、の方がわかりやすいか。</p> <p>そんな感じの理屈で、プライベートIPは<br /> 同じネットワーク内で重複して使うことは出来ないけど、世界規模で見たら重複はOKです。</p> <h3 id="じゃあlocalhost(127.0.0.1)はどっち?"><a href="#%E3%81%98%E3%82%83%E3%81%82localhost%28127.0.0.1%29%E3%81%AF%E3%81%A9%E3%81%A3%E3%81%A1%EF%BC%9F">じゃあlocalhost(127.0.0.1)はどっち?</a></h3> <p>もうおわかりかと思いますが、プライベートIPです。<br /> プライベートIPなので、皆同じ127.0.0.1っていうIPアドレスで自分のPCにアクセスすることが出来るというわけです。</p> <h2 id="localhostにアクセスしてみる"><a href="#localhost%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">localhostにアクセスしてみる</a></h2> <p>試しに、何もしないままでブラウザからlocalhostにアクセスしてみます。(URL部分にlocalhostって入れる)<br /> <a href="https://crieit.now.sh/upload_images/615a5561b95c310f92932d9da840c00260ac62c271d4e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/615a5561b95c310f92932d9da840c00260ac62c271d4e.png?mw=700" alt="image" /></a><br /> 当然こうなります。</p> <p>localhostというのは自分のPCを指している、ただそれだけであって、<br /> 何もしていないのであればwebサーバでもDBサーバでもなんでも無いんですよね。</p> <p>ここで、Apacheを起動した状態でlocalhostにアクセスしてみます。</p> <p><a href="https://crieit.now.sh/upload_images/058f853c1a17847b976120b7a1ac913560ac63ce316c6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058f853c1a17847b976120b7a1ac913560ac63ce316c6.png?mw=700" alt="image" /></a></p> <p>XAMPPを入れてるので、お馴染みのこの初期画面が出てきました。<br /> (なので厳密には、「localhost/dashboard/」になるんですけど)</p> <p>Apacheを起動したことで、PCさんはwebサーバとして機能し始めました。<br /> もちろん、DBサーバとして機能させることも可能なわけです。</p> <h2 id="なるほど。で、つまりは?"><a href="#%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%E3%80%82%E3%81%A7%E3%80%81%E3%81%A4%E3%81%BE%E3%82%8A%E3%81%AF%EF%BC%9F">なるほど。で、つまりは?</a></h2> <p>ってことは、localhost(=自分のPC)を、プロキシサーバとして機能させることも出来るよね!!<br /> ということで、手順の</p> <blockquote> <p>Address欄には「localhost」</p> </blockquote> <p>は、「自分のPCをプロキシサーバちゃんとして間に挟んであげようね!」<br /> みたいな意味かな~?と。</p> <p>ふぅ~ここまで長かったぜ。</p> <h1 id="ポート番号"><a href="#%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7">ポート番号</a></h1> <p>お次は</p> <blockquote> <p>ポート欄には任意のポート番号(他と競合しない番号)を入力</p> </blockquote> <p>この部分です。<br /> こう考えると、自分何も知らねーんだな!<br /> 仕方ない、赤ちゃんだもの。<br /> 頑張って見ていきます。</p> <h2 id="まずポートとは"><a href="#%E3%81%BE%E3%81%9A%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E3%81%AF">まずポートとは</a></h2> <p>ネットワークからコンピュータ(サーバ)にデータを送受信するときのドアみたいなものです。</p> <p>インターネットさんは80番のドア、FTPは20番のドアですよー みたいに<br /> データによって既にどのドアを決まっているものもあれば、<br /> ここからここまでは自由に使っていいですよ~~ なドアもあります。</p> <p>80番、とか20番、っていう番号がポート番号です。</p> <h2 id="ウェルノウンポート"><a href="#%E3%82%A6%E3%82%A7%E3%83%AB%E3%83%8E%E3%82%A6%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88">ウェルノウンポート</a></h2> <p>ポート番号が0~1023までのポートのことで、基本誰が通るのか決められています。</p> <h2 id="登録済みポート"><a href="#%E7%99%BB%E9%8C%B2%E6%B8%88%E3%81%BF%E3%83%9D%E3%83%BC%E3%83%88">登録済みポート</a></h2> <p>ポート番号が1024~49512までのポートのことで、<br /> ウェルノウン程ではないけど、よく使うアプリなどに割り振られます。</p> <h2 id="ダイナミック/プライベートポート"><a href="#%E3%83%80%E3%82%A4%E3%83%8A%E3%83%9F%E3%83%83%E3%82%AF%2F%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%9D%E3%83%BC%E3%83%88">ダイナミック/プライベートポート</a></h2> <p>ポート番号が49513~65535までのポートのことで、基本的にこの間のポートが自由に使えるポートです。</p> <p>なので、</p> <blockquote> <p>ポート欄には任意のポート番号(他と競合しない番号)を入力</p> </blockquote> <p>ここには49513~65535のうち好きな番号を指定してあげればOKです。</p> <h1 id="一旦終わり"><a href="#%E4%B8%80%E6%97%A6%E7%B5%82%E3%82%8F%E3%82%8A">一旦終わり</a></h1> <p>モロ一番最初のところだけでも、だいぶ体力使いました…。<br /> 正直、ここの範囲は知らなくても脆弱性診断はできちゃいますけど、知ってて損する知識なんか無いよねってことでまとめてみました。<br /> まだ深く理解は出来てないので、ざっくりゆるーく、ですけど。<br /> 診断に関係なく、この業界にいる以上基礎中の基礎知識だったと思うので、これを期に勉強出来てよかったなと思います。</p> <p>余力があれば、次は脆弱性診断で実際に行われている攻撃なども調べられたらいいな!</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1752.html">プロキシ (proxy)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.yoheim.net/blog.php?q=20160702#:~:text=%E6%9C%80%E5%BE%8C%E3%81%AB-,%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%A8%E3%81%AF,%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82">[フロントエンド] ローカルプロキシを用いて、本番サイトで開発/デバッグを行う - YoheiM .NET</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.atmarkit.co.jp/ait/articles/0710/26/news131.html">リクエストをいじれば脆弱性の仕組みが見えるのだ!:もいちどイチから! HTTP基礎訓練中(2)(1/3 ページ) - @IT</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://codor.co.jp/django/localhost">localhostについて詳しく解説【具体的に解説します】 - code for Django</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1286.html">ドメイン名とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word11976.html">グローバルIPアドレスとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word11977.html">プライベートIPアドレスとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://kino-code.com/whta-is-port-number/#102449151">【3分解説】ポート番号ってなに? | キノコード</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://27bit.com/question-number.html">ポート番号は何番を使えばいいのか教えて下さい - ポート開放ナビ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://wa3.i-3-i.info/word1774.html">ポートとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典</a></li> </ul> みみみみみ tag:crieit.net,2005:PublicArticle/17227 2021-05-21T16:23:01+09:00 2021-05-21T16:23:01+09:00 https://crieit.net/posts/php-Laravel-60a75fd51f5f0 php(Laravel)でエクセルのインポート機能付けるときに試したもの <h1 id="渡されたデータがエクセルだった"><a href="#%E6%B8%A1%E3%81%95%E3%82%8C%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%81%A0%E3%81%A3%E3%81%9F">渡されたデータがエクセルだった</a></h1> <p>「ほいっじゃあこれ取り込んでね」<br /> と渡されたのは、2~3万行のデータ(エクセル形式)だった。<br /> …えー!CSVじゃないんですかー!?!?CSVはやったことあるけど、エクセルは知らーん!!</p> <p>ということで、3つほどライブラリを試してようやく機能実装が出来たので、その時のメモです</p> <h1 id="Laravel Excel"><a href="#Laravel+Excel">Laravel Excel</a></h1> <p>URL:<a target="_blank" rel="nofollow noopener" href="https://laravel-excel.com">https://laravel-excel.com</a></p> <p>これはLaravelのライブラリ(パッケージ?)ですね。<br /> 後に紹介するPhpSpreadsheetを基に作られております。<br /> エクセルだけでなくcsvも扱えます。</p> <p>使い方も特別難しいわけでもなく、<br /> 公式ドキュメントを落ち着いて読んでいけば大抵は問題ないはずです。</p> <p>…がしかぁし!</p> <p>データ数が少なめのテストデータでは問題ありませんでしたが、<br /> いざ実際の2~3万件データで試したところメモリ不足で死に至りました。(チーン)</p> <p>php-fpmの設定弄ってみたり、<br /> toArrayがいけないのか?と思いonRowで1行ずつinsertしてみたり…。<br /> かなり色々試行錯誤してみましたが解決には至らず、ライブラリ使用自体を断念しました…。</p> <p>(もし解決法ご存知の方がいらっしゃいましたら、そっとご教示いただければ幸いに存じます)</p> <h1 id="PhpSpreadsheet"><a href="#PhpSpreadsheet">PhpSpreadsheet</a></h1> <p>URL:<a target="_blank" rel="nofollow noopener" href="https://phpspreadsheet.readthedocs.io/en/latest/">https://phpspreadsheet.readthedocs.io/en/latest/</a></p> <p>くそう、ならば元であるコイツで試してみるか!<br /> てな感じで、半ヤケクソでやってみました。<br /> なお、phpExcelというライブラリの後継版らしいです。</p> <p>結論、メモリ不足も解決せず、なんなら処理時間も増えて、解決には至りませんでした…。<br /> 使用感としては、シンプルで使いやすいなーとは思いました。<br /> また、laravel excelより使用率が高いので、参考にできる記事も多い(日本語記事も多い)という点は良かったです。</p> <h1 id="Spout"><a href="#Spout">Spout</a></h1> <p>URL:<a target="_blank" rel="nofollow noopener" href="https://opensource.box.com/spout/"> https://opensource.box.com/spout/</a></p> <h4><strong>救 世 主</strong></h4> <p>メモリ不足問題はこれで解決しました!!!<br /> 代わりにCPU使用率がギュイーンと上がりますが。</p> <p>ただこれ、マイナーなのかわかりませんがググってもほぼ出てきません。<br /> 出てきたとしても全部英語です。google翻訳がある世界に生まれてよかった。</p> <p>基本公式ドキュメントを頼りにやるしか無いので、赤ちゃんエンジニアにはちょっと厳しかったです…。<br /> やりたいことが至ってシンプルだったのでなんとかなりましたが。</p> <p>気力があれば、使い方のメモも別で書こうかと思います。来世までにはきっと。</p> <h1 id="なお後日"><a href="#%E3%81%AA%E3%81%8A%E5%BE%8C%E6%97%A5">なお後日</a></h1> <p>えらいひと「ちょっとフォーマット変えたので、再度送るで!これで取り込んでくれや! つCSVファイル」<br /> ワイ「いやCSVで出力できんのかい!!!!!!!!!!!」</p> <p>~完~</p> みみみみみ tag:crieit.net,2005:PublicArticle/17143 2021-05-17T12:19:32+09:00 2021-05-17T12:23:37+09:00 https://crieit.net/posts/FHS FHSについて <p><strong>FHSとは</strong><br /> FHSは、Linux(などのUNIX系OS)の標準的なディレクトリ構成を定めた標準仕様です。<br /> たとえば「/etcディレクトリには設定ファイルを置きましょう」など、ディレクトリの名前や構成、<br /> ファイルの名前などについての「標準」です。<br /> 以前はあくまで慣習であり、明確な明文化された取り決めがありませんでした。<br /> このため、システム、ディストリビューションによって、どのディレクトリにどのファイルが<br /> あるのかがまったく異なっているという状況だったのです。<br /> このような状況は、わかりにくいというのが1つ困ったところになりますが、さらにトラブルの原因に<br /> なるということもあり得ます。たとえば共有ライブラリなどがどこにあるのかわからない、<br /> 名前も違うという状況になってしまうと、ソフトウェアのインストールが上手くいかない、<br /> インストールできても正しく動作しないなどのトラブルが考えられるわけです。<br /> こういった不都合を少しでも減らそうと、FHSが策定されたのです。</p> <p><strong>頻繁に使うディレクトリ</strong></p> <blockquote> <pre><code>/bin 基本コマンドが保存される /boot OSのブートに必要なファイルが保存される /dev デバイスファイルが保存される /etc システムの設定ファイルが保存される /home ⼀般ユーザのホームディレクトリ (rootユーザは/root) /lib ライブラリが保存される /media CD-ROMやUSBメモリ等のマウント先が保存される /sbin 管理系コマンドが保存される /tmp ⼀時的に利⽤するファイルが保存される /usr ユーザが共⽤するコマンドやライブラリなど /var 頻繁に更新されるファイルが保存される /var/log ログファイルが保存される </code></pre> </blockquote> numa_0529t tag:crieit.net,2005:PublicArticle/16525 2021-01-05T17:01:17+09:00 2021-01-07T12:08:23+09:00 https://crieit.net/posts/7190e0de6bf58f1c72aae51d5841b80e サーバ入門1 振り返り <h1 id="「インフラ入門」「技術ブログ入門」「サーバ入門」 振り返り"><a href="#%E3%80%8C%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E5%85%A5%E9%96%80%E3%80%8D%E3%80%8C%E6%8A%80%E8%A1%93%E3%83%96%E3%83%AD%E3%82%B0%E5%85%A5%E9%96%80%E3%80%8D%E3%80%8C%E3%82%B5%E3%83%BC%E3%83%90%E5%85%A5%E9%96%80%E3%80%8D%E3%80%80%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A">「インフラ入門」「技術ブログ入門」「サーバ入門」 振り返り</a></h1> <h3 id="PCとサーバの「メモリ」の違い"><a href="#PC%E3%81%A8%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E3%80%8C%E3%83%A1%E3%83%A2%E3%83%AA%E3%80%8D%E3%81%AE%E9%81%95%E3%81%84">PCとサーバの「メモリ」の違い</a></h3> <div class="table-responsive"><table> <thead> <tr> <th></th> <th>メインメモリ</th> <th>レジスタードバッファ</th> </tr> </thead> <tbody> <tr> <td>PC</td> <td>非対応     </td> <td>非対応</td> </tr> <tr> <td>サーバ</td> <td>対応</td> <td>    対応</td> </tr> </tbody> </table></div> <hr /> <h3 id="CPU・メモリ・ディスク(HDD)の転送速度の違い"><a href="#CPU%E3%83%BB%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%BB%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%EF%BC%88HDD%EF%BC%89%E3%81%AE%E8%BB%A2%E9%80%81%E9%80%9F%E5%BA%A6%E3%81%AE%E9%81%95%E3%81%84">CPU・メモリ・ディスク(HDD)の転送速度の違い</a></h3> <div class="table-responsive"><table> <thead> <tr> <th>CPU</th> <th>メモリ</th> <th>ディスク</th> </tr> </thead> <tbody> <tr> <td>高速</td> <td>    ⇔    </td> <td>  低速    </td> </tr> </tbody> </table></div> <p>ディスク(HDD)はメモリより <strong>340倍遅い</strong></p> Ususuke tag:crieit.net,2005:PublicArticle/16237 2020-11-25T17:55:46+09:00 2020-11-25T17:55:46+09:00 https://crieit.net/posts/c-c-doxygen c,c++のコメントメモ(doxygenを使用) <p>この記事ははてなをメインにQrunch(閉鎖済み)、Crieitにクロス投稿しています</p> <h4 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h4> <p>VisualStudio2017</p> <p>VisualStudio2019</p> <p>VSCode</p> <h4 id="Doxygenで生成したドキュメントのどこで表示されるかわからない"><a href="#Doxygen%E3%81%A7%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%81%A9%E3%81%93%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%8B%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84">Doxygenで生成したドキュメントのどこで表示されるかわからない</a></h4> <p>変数等の@briefは詳解の前の簡単な説明と詳解の後のところに表示。<br /> @detailsは詳解のところに表示される。</p> <h4 id="コメントの書く場所をどうすべきか"><a href="#%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E6%9B%B8%E3%81%8F%E5%A0%B4%E6%89%80%E3%82%92%E3%81%A9%E3%81%86%E3%81%99%E3%81%B9%E3%81%8D%E3%81%8B">コメントの書く場所をどうすべきか</a></h4> <p>VisualStudioではcppに書いたときInteliSenseが機能しなかったので<br /> ヘッダーに書くのが良さそうです。<br /> ただテンプレート関数をクラス内で多用するとコメントと合わせかなり行数が増えるので注意が必要です。<br /> <del>どうにかしたい・・・</del></p> <h4 id="前置簡易コメント"><a href="#%E5%89%8D%E7%BD%AE%E7%B0%A1%E6%98%93%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">前置簡易コメント</a></h4> <pre><code>/// コメント /// @detailsと同じ扱いに int i; /// コメント </code></pre> <p>このコメントはvisualstudioで使うとxmlコメントの書き方に被るみたいで<br /> InteliSense(変数や関数を選んだときに表示されるやつ)に表示されません。<br /> なので以下を使用しました。</p> <pre><code>//! コメント //!@brief 説明 </code></pre> <h4 id="後置コメント"><a href="#%E5%BE%8C%E7%BD%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">後置コメント</a></h4> <pre><code>int a;///<コメント </code></pre> <p>これもvisualstudioでは「XMLコメントに無効なXMLが含まれます」と表示されるので</p> <pre><code>int a//!<コメント </code></pre> <p>を使用しました。<br /> あと、Visual studioのc++用のxmlコメントは拡張機能で使用可能みたいです。</p> <p><a target="_blank" rel="nofollow noopener" href="http://cercopes-z.com/Doxygen/list-command-dxy.html">[VisualStudio]C++でもXMLドキュメントコメントを自動挿入したい!!</a></p> <h4 id="各ファイルのコメント"><a href="#%E5%90%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">各ファイルのコメント</a></h4> <p>一番始めにいります。<br /> 最低限この2行あれば十分っぽいです。</p> <pre><code>/*! @file 何も書かなくてもいい @brief このファイルの説明を書く ファイル一覧のところに出力されます */ </code></pre> <h4 id="変数、マクロのコメント"><a href="#%E5%A4%89%E6%95%B0%E3%80%81%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">変数、マクロのコメント</a></h4> <pre><code>int hp;//!@brief コメント //!@brief     コメント //!@details   コメント int mp; </code></pre> <p>基本後置コメントがスマートでいいのですが複数行に対応してないみたいなので<br /> 複数行に書く場合は前置のほうがいいです。</p> <h4 id="関数のコメント"><a href="#%E9%96%A2%E6%95%B0%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">関数のコメント</a></h4> <pre><code>/*! @brief 関数の要約 @param 引数名 引数の詳細引数の個数分かく @return 戻り値の詳細 @details 関数の細かい説明 */ </code></pre> <h4 id="クラス、列挙体へのコメント"><a href="#%E3%82%AF%E3%83%A9%E3%82%B9%E3%80%81%E5%88%97%E6%8C%99%E4%BD%93%E3%81%B8%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">クラス、列挙体へのコメント</a></h4> <pre><code>/*! @brief 要約 クラスなら一覧にも書かれます @details 細かい説明 */ </code></pre> <h4 id="便利なコメント"><a href="#%E4%BE%BF%E5%88%A9%E3%81%AA%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88">便利なコメント</a></h4> <div class="table-responsive"><table> <thead> <tr> <th>@todo</th> <th>書くとTODOリストが自動で作成されめっちゃ便利!</th> </tr> </thead> <tbody> <tr> <td>@see</td> <td>参照したい関数、変数を書ける</td> </tr> <tr> <td>@note</td> <td>メモを書ける</td> </tr> <tr> <td>@n</td> <td>文の途中で改行してくれます。</td> </tr> <tr> <td>@retval</td> <td>@returnの代わりに使用 戻り値ごとの細かい説明を書ける。</td> </tr> </tbody> </table></div> <h4 id="参考にしたサイト"><a href="#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E3%82%B5%E3%82%A4%E3%83%88">参考にしたサイト</a></h4> <p><a target="_blank" rel="nofollow noopener" href="http://cercopes-z.com/Doxygen/list-command-dxy.html">Doxygen コマンド一覧</a><br /> <a target="_blank" rel="nofollow noopener" href="https://teratail.com/questions/69989">C++で///を使ったコメント - teratail</a></p> <h4 id="VSCodeの拡張機能(2020-11-25追記)"><a href="#VSCode%E3%81%AE%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%282020-11-25%E8%BF%BD%E8%A8%98%29">VSCodeの拡張機能(2020-11-25追記)</a></h4> <p>VSCodeにはDoxygen形式のコメントを自動生成してくれるとても便利な拡張機能があります<br /> <a target="_blank" rel="nofollow noopener" href="https://marketplace.visualstudio.com/items?itemName=cschlosser.doxdocgen">Doxygen Documentation Generator</a><br /> 関数やクラスの前、ファイルの先頭で/**と改行だけで必要な内容を生成できるのでとてもおすすめです。</p> jupi tag:crieit.net,2005:PublicArticle/16209 2020-11-10T17:49:58+09:00 2020-11-10T17:49:58+09:00 https://crieit.net/posts/js-5faa5436c3be5 【js】連想配列からインデックスを取得 <p>よく忘れるのでメモ。</p> <p>参考元:<a target="_blank" rel="nofollow noopener" href="https://qiita.com/Test_test/items/7d532f445f2980e896d0">https://qiita.com/Test_test/items/7d532f445f2980e896d0</a></p> <pre><code class="javascript">const obj = [ { num: 0, name: 'AAA', age: '60'}, { num: 1, name: 'BBB', age: '20'}, { num: 2, name: 'CCC', age: '40'}, { num: 3, name: 'DDD', age: '50'}, ]; obj.findIndex(({name}) => name === 'DDD'); // 3 obj.findIndex(({age}) => age === '20'); // 1 </code></pre> <p><code>findindex</code>は、インデックスが見つからなかった場合は<code>-1</code>を返すため、<br /> 条件分岐をする時は注意。</p> <pre><code class="javascript">var index = obj.findIndex(({age}) => age === '22'); if (index === -1) { console.log("見つかりませんでした。"); } else { console.log(index); } </code></pre> みみみみみ tag:crieit.net,2005:PublicArticle/16153 2020-10-19T18:10:44+09:00 2020-10-19T18:10:44+09:00 https://crieit.net/posts/ios-5f8d581420de5 iosだけ画像が縦に伸びる時 <p>「display:flex;」を指定している箇所に、「align-items: flex-start;」を追記するだけ!!</p> <p><a target="_blank" rel="nofollow noopener" href="https://nichiyogogo.com/image-looks-stretched/">https://nichiyogogo.com/image-looks-stretched/</a></p> みみみみみ tag:crieit.net,2005:PublicArticle/16152 2020-10-19T18:06:59+09:00 2020-10-19T18:06:59+09:00 https://crieit.net/posts/Vuex 【Vuex】別モジュールのステート、メソッド呼び出し <pre><code class="js">const moduleA = { // ... actions: { testA(context) { // state console.log(context.rootState.moduleName.stateName) // mutation context.commit("moduleName/mutationName", "引数", {root: true}); // action context.dispatch("moduleName/actionName", "引数", {root: true}); } } </code></pre> みみみみみ tag:crieit.net,2005:PublicArticle/16150 2020-10-19T17:59:58+09:00 2020-10-19T17:59:58+09:00 https://crieit.net/posts/MySQL-DISTINCT 【MySQL】DISTINCT──重複したデータを除外する <p><a target="_blank" rel="nofollow noopener" href="https://www.dbonline.jp/mysql/select/index13.html">https://www.dbonline.jp/mysql/select/index13.html</a></p> <p>DISTINCT を指定すると、取得するカラムの値が一致しているデータは除外してデータを取得することができる。</p> みみみみみ tag:crieit.net,2005:PublicArticle/16149 2020-10-19T17:58:51+09:00 2020-10-19T17:58:51+09:00 https://crieit.net/posts/php-php7-foreach 【php】php7系では、ループは普通にforeachを使えば良い <p>OOMの原因調査をしていた時</p> <p><a target="_blank" rel="nofollow noopener" href="https://norm-nois.com/blog/archives/1774">foreachを使うとき、もうちょいメモリのことを気にして行こうぜ</a><br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/h13/items/a75fba76f435212a2eb3">[PHP]ループのメモリ使用量と処理速度を比較しました</a></p> <p>こんな記事を見つけた。</p> <p>なるほど、foreachは配列のコピーを作るからメモリを食ってしまうので、<br /> 何でもかんでもforeachを使えばいいってわけじゃないのか…。<br /> 使う時も、unsertとかを上手く使わないといけないのか…。</p> <p>と思ったのですが。<br /> どうやらコレは2010年辺り(php5系?)の話のようで、<br /> php7系ではそんなことないらしい。</p> <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/Mister_K/items/5bcee3fdb95ed34313e4">PHP7系におけるループのメモリ使用量と処理速度を比較</a></p> <p>実際、自分のコードでも軽く比較してみたけど、特に差は見られなかった。<br /> (ちゃんとは比較してないので数値は載せませんが。)<br /> というか、</p> <pre><code class="php">while(list($key, $val) = each($data)) { $results[] = $key * $val; } </code></pre> <p>↑コレに関しては「eachはもう使うんじゃねえ」などと怒られた。</p> <h1 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h1> <p>今まで通りforeach使おう。<br /> そしてメモリ食ってるのは、foreachやforeachの使い方が悪いわけじゃない というのがわかった。</p> <h1 id="ただのぼやき"><a href="#%E3%81%9F%E3%81%A0%E3%81%AE%E3%81%BC%E3%82%84%E3%81%8D">ただのぼやき</a></h1> <p>「php foreach メモリ」とかで検索すると、<br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/h13/items/a75fba76f435212a2eb3">[PHP]ループのメモリ使用量と処理速度を比較しました</a><br /> これが上位に出てくるんですよね。<br /> 多分こういうことって普通にあると思うので…参考にする前に、<br /> ・何年前の記事なのか<br /> ・バージョン<br /> くらいはちゃんと確認しないといかんな。</p> <p>と、改めて感じた。</p> みみみみみ tag:crieit.net,2005:PublicArticle/16147 2020-10-19T17:52:20+09:00 2020-10-19T17:52:20+09:00 https://crieit.net/posts/php-usort 【php】連想配列を、指定した配列の順番で並び替える (usort) <p><a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/function.usort.php">https://www.php.net/manual/ja/function.usort.php</a><br /> 配列を並び替える関数の一つで、自分で指定した条件通りに並び替えることができる</p> <pre><code class="php">function cmp($a, $b) { if ($a== $b) { return 0; } return ($a< $b) ? -1 : 1; } $array = [3, 2, 5, 6, 1]; usort($array , "cmp"); foreach ($array as $key => $value) { echo "$key: $value\n"; } </code></pre> <p>出力結果:</p> <pre><code>0: 1 1: 2 2: 3 3: 5 4: 6 </code></pre> <p>呼び出し方は、<br /> usort(配列, コールバック関数)</p> <p>コールバック関数の返り値を使って並び替えをする。</p> <div class="table-responsive"><table> <thead> <tr> <th>返り値</th> <th>処理</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>そのまま(並び替えない)</td> </tr> <tr> <td>-1</td> <td><code>$a</code>の順番を<code>$b</code>より繰り下げる</td> </tr> <tr> <td>1</td> <td><code>$a</code>の順番を<code>$b</code>より繰り上げる</td> </tr> </tbody> </table></div> <p>↑これを全部の組み合わせで実行し、最終的に昇順に並び替えられる</p> <h1 id="usortを使って、連想配列を任意の順番に並び替える"><a href="#usort%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%80%81%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97%E3%82%92%E4%BB%BB%E6%84%8F%E3%81%AE%E9%A0%86%E7%95%AA%E3%81%AB%E4%B8%A6%E3%81%B3%E6%9B%BF%E3%81%88%E3%82%8B">usortを使って、連想配列を任意の順番に並び替える</a></h1> <p>teratailの方で見つけて感動したのでメモ。(メモと言うかもろコピペですみません)<br /> <a target="_blank" rel="nofollow noopener" href="https://teratail.com/questions/93290">https://teratail.com/questions/93290</a></p> <pre><code class="php">$sortID=[3, 5, 12, 23, 67]; $array = [ ['id'=>3,'name'=>"test1"], ['id'=>67,'name'=>"test2"], ['id'=>23,'name'=>"test3"], ['id'=>12,'name'=>"test4"], ['id'=>5,'name'=>"test5"], ]; usort($array, function($a, $b) use ($sortID){ return array_search($a["id"], $sortID) > array_search($b["id"], $sortID); }); print_r($array); </code></pre> <p>出力結果:</p> <pre><code>Array ( [0] => Array ( [id] => 3 [name] => test1 ) [1] => Array ( [id] => 5 [name] => test5 ) [2] => Array ( [id] => 12 [name] => test4 ) [3] => Array ( [id] => 23 [name] => test3 ) [4] => Array ( [id] => 67 [name] => test2 ) ) </code></pre> <p>おお~。<br /> $sortIDに同じ値がある場合はちょっと足さないといけないっぽいけど、<br /> これは意外と色んな場面で使えそう。</p> みみみみみ tag:crieit.net,2005:PublicArticle/16146 2020-10-19T17:50:23+09:00 2020-10-19T17:50:23+09:00 https://crieit.net/posts/Laravel-feature 【Laravel】feature テスト レスポンスのデバッグ <pre><code class="php">$response = $this->get('/'); $response->assertStatus(200) </code></pre> <p>みたいなテストをするとき、レスポンスの中身をみたい場面があった。</p> <pre><code class="php">$response->dumpHeaders(); $response->dumpSession(); $response->dump(); </code></pre> <p>これで取得できる!<br /> ちゃんとドキュメントにも書いてあった。<br /> <a target="_blank" rel="nofollow noopener" href="https://readouble.com/laravel/6.x/ja/http-tests.html">https://readouble.com/laravel/6.x/ja/http-tests.html</a></p> <p>もっと早く気付けたら良かった~~~</p> みみみみみ tag:crieit.net,2005:PublicArticle/16145 2020-10-19T17:47:24+09:00 2020-10-19T17:47:24+09:00 https://crieit.net/posts/js js ファイルをドラッグ&ドロップでアップロードするとき、フォルダは弾く <pre><code class="html"><!-- ここにドラッグ&ドロップ --> <div @dragover.prevent @dragleave.prevent @drop.prevent="onDrop($event)"></div> </code></pre> <pre><code class="javascript">function onDrop() { const items = event.dataTransfer.items; for (var item of items) { var entry = item.webkitGetAsEntry(); if (entry.isDirectory) { alert("フォルダはアップロードできません"); return; } } } </code></pre> みみみみみ tag:crieit.net,2005:PublicArticle/16144 2020-10-19T17:46:19+09:00 2020-10-19T17:46:19+09:00 https://crieit.net/posts/WHERE-id-1 WHERE id !=1 みたいな条件文を書く時に気をつけること <p>idに必ず数値が入っている場合は</p> <pre><code class="sql">SELECT * FROM table WHERE id !=1; </code></pre> <p>でidが1以外のデータすべて取れるけど、<br /> これだと<strong>id=NULLのデータは取れない</strong></p> <p>ので、</p> <pre><code class="sql">SELECT * FROM table WHERE id !=1 OR id IS NULL; </code></pre> <p>のように書けばidがNULLのデータも取得できる。</p> みみみみみ tag:crieit.net,2005:PublicArticle/16143 2020-10-19T17:44:29+09:00 2020-10-19T17:44:29+09:00 https://crieit.net/posts/Laravel-Debugbar-Telescope-Mixed-Content Laravel  DebugbarやTelescopeを使おうとするとMixed Contentでエラーになる <p>AppServiceProvider.phpのboot()中に、</p> <pre><code class="php">if (config('app.env') === 'production') { \URL::forceScheme('https'); } </code></pre> <p>を入れるだけで解決!</p> みみみみみ tag:crieit.net,2005:PublicArticle/16141 2020-10-19T17:33:30+09:00 2020-10-19T17:33:30+09:00 https://crieit.net/posts/PHP-5f8d4f5a75e61 【PHP】連想配列からデータを検索 <p><a target="_blank" rel="nofollow noopener" href="https://qiita.com/rorensu2236/items/c3538629a9d9fed4daaa">https://qiita.com/rorensu2236/items/c3538629a9d9fed4daaa</a><br /> <a target="_blank" rel="nofollow noopener" href="https://qiita.com/LinWC/items/dce6e4d85cfee67ce79b">https://qiita.com/LinWC/items/dce6e4d85cfee67ce79b</a></p> <pre><code class="php">$fruits = [ ["id" => 1, "name" => "ナシ"], ["id" => 2, "name" => "さくらんぼ"], ["id" => 3, "name" => "モモ"], ["id" => 4, "name" => "オレンジ"], ["id" => 5, "name" => "リンゴ"], ]; $keyIndex = array_search("オレンジ", array_column($fruits , "name")); // array_searchは見つからなかった場合はfalseを返す if ($keyIndex !== false) { $result = $fruits[$keyIndex]; } var_dump($result); </code></pre> みみみみみ tag:crieit.net,2005:PublicArticle/14993 2019-05-18T12:11:55+09:00 2019-06-30T21:06:38+09:00 https://crieit.net/posts/Markdown-7 Markdownノート比べて見た7選 <h1 id="Evernoteが使いづらいと感じた"><a href="#Evernote%E3%81%8C%E4%BD%BF%E3%81%84%E3%81%A5%E3%82%89%E3%81%84%E3%81%A8%E6%84%9F%E3%81%98%E3%81%9F">Evernoteが使いづらいと感じた</a></h1> <p>1年くらいEvernoteにお世話になりましたが、満足できませんでした。<br /> Evernoteは素晴らしいノートアプリですが、整理がしづらい、ノートが書きづらいと感じました。</p> <h1 id="私が求めるMarkdownノート"><a href="#%E7%A7%81%E3%81%8C%E6%B1%82%E3%82%81%E3%82%8BMarkdown%E3%83%8E%E3%83%BC%E3%83%88">私が求めるMarkdownノート</a></h1> <p>条件は以下の通りで調べました。</p> <ul> <li><strong>Makdown記法が使える</strong> <ul> <li>Markdown記法は速く書くことができ、他の場でも使えるから</li> </ul></li> <li><strong>ノートをディレクトリ構造に出来る</strong> <ul> <li>キレイに整理したいから。ディレクトリ構造に慣れているから</li> </ul></li> <li><strong>ダークモード</strong> <ul> <li>白背景は眩しいと感じるから</li> </ul></li> <li><strong>スマホアプリ対応</strong> <ul> <li>急に思いついた事をメモしたい時に使えないと不便だから</li> </ul></li> <li><strong>デスクトップアプリがある</strong> <ul> <li>これはUXの面でWeb版とは段違いだから</li> </ul></li> <li><strong>全文検索がある</strong> <ul> <li>一発で目的のノートにたどり着きたいから。</li> </ul></li> </ul> <p>作業や仕事、生活に直結するノートアプリなので、これくらいこだわりたいです。</p> <h1 id="注意"><a href="#%E6%B3%A8%E6%84%8F">注意</a></h1> <p>全て素晴らしいアプリケーションです。<br /> 皆さんの好みでアプリケーションを選んでください。</p> <h1 id="追記"><a href="#%E8%BF%BD%E8%A8%98">追記</a></h1> <p>----- 2019/06/30 -----<br /> 現在使用しているのは、Bearです。<br /> ディレクトリを管理するのが煩わしくなりました。<br /> タグで整理できるBearが一番だと思っています。</p> <hr /> <h1 id="選ばれたのはInkdrop"><a href="#%E9%81%B8%E3%81%B0%E3%82%8C%E3%81%9F%E3%81%AE%E3%81%AFInkdrop">選ばれたのはInkdrop</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://inkdrop.app/">Inkdrop</a></p> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf758fb5e15.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf758fb5e15.png?mw=700" alt="image.png" /></a></p> <p>良かった点<br /> - 求める点をすべて満たす<br /> - 追加pluginが存在し、つくれる(<a target="_blank" rel="nofollow noopener" href="https://github.com/inkdropapp/inkdrop-breaks">MarkdownにおいてEnterでの改行をサポートするプラグイン</a>やvimキーバインドなど)<br /> - iOS/Android, macOS/Window/Linux 全て利用可能でマルチプラットフォーム対応</p> <p>自分が好みではなかった点<br /> - デスクトップアプリのUX<br /> - トップディレクトリにサブディレクトリのノート全てが表示されない</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>月額 $4.99 / 年額 $49.9</p> <p>学割 上記の値段から60%割引</p> <h1 id="最後まで奮闘したQuiver"><a href="#%E6%9C%80%E5%BE%8C%E3%81%BE%E3%81%A7%E5%A5%AE%E9%97%98%E3%81%97%E3%81%9FQuiver">最後まで奮闘したQuiver</a></h1> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf75bd10ed8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf75bd10ed8.png?mw=700" alt="image.png" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://happenapps.com/">Quiver</a></p> <p>良かった点<br /> - 求める点をほぼ満たす<br /> - 素晴らしいデスクトップアプリのUX</p> <p>自分が好みではなかった点<br /> - スマホアプリが読み込み専用</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>買い切り 1,200円</p> <h1 id="健闘したMWeb"><a href="#%E5%81%A5%E9%97%98%E3%81%97%E3%81%9FMWeb">健闘したMWeb</a></h1> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf7626433ce.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf7626433ce.png?mw=700" alt="image.png" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.mweb.im/">MWeb</a></p> <p>良かった点<br /> - 求める点をすべて満たす</p> <p>自分が好みではなかった点<br /> - iCloudなど利用して共有するため、スマホアプリでノートを開くのに1タップ挟むため、好みではなかった<br /> - ディレクトリごとのRecentソート設定にするには各ディレクトリで毎回設定 + ソートの反応が悪い</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>買い切り macOS 2400円<br /> 買い切り iOS 1080円</p> <h1 id="Notion"><a href="#Notion">Notion</a></h1> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf7637151de.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf7637151de.png?mw=700" alt="image.png" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.notion.so/">Notion</a></p> <p>良かった点<br /> - 求める点をすべて満たす</p> <p>自分が好みではなかった点<br /> - ToDoリストやカンバンプロジェクトなどが使え、万能なため、ノートアプリとしてのUI/UXが他と比べて好みではない</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>1人専用 $4/月額</p> <h1 id="Bear"><a href="#Bear">Bear</a></h1> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf764604a0c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf764604a0c.png?mw=700" alt="image.png" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://bear.app/">Bear</a></p> <p>良かった点<br /> - モダンなUI<br /> - 求める点をほぼ満たす</p> <p>自分が好みではなかった点<br /> - タグで階層分けする点</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>月額 150円 / 年額 1,500円<br /> クラウドバックアップ + iOSとmacOSの同期</p> <h1 id="Dynalist"><a href="#Dynalist">Dynalist</a></h1> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf76882cc71.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf76882cc71.png?mw=700" alt="image.png" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://dynalist.io/">Dynalist</a></p> <p>良かった点<br /> - 求める点をほぼ満たす</p> <p>自分が好みではなかった点<br /> - MarkdownのようでMarkdownではない</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>pro 月額 $7.99(年で払う場合の月額)</p> <h1 id="Slack"><a href="#Slack">Slack</a></h1> <p><a href="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf76f48a3b0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/0c174158070ecf8a139e7d5fe11570685cdf76f48a3b0.png?mw=700" alt="image.png" /></a><br /> <a target="_blank" rel="nofollow noopener" href="https://slack.com/intl/ja-jp/">slack</a></p> <p>良かった点<br /> - 求める点をほぼ満たす</p> <p>自分が好みではなかった点<br /> - ディレクトリ構造に出来ない</p> <h3 id="料金"><a href="#%E6%96%99%E9%87%91">料金</a></h3> <p>ほぼ無料</p> <h1 id="最後に"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">最後に</a></h1> <p>挙げた以外にも沢山あります。好きなMarkdownノートを使って良きMarkdown生活を送ってください👍</p> しがしぃ@MyPoZi