プログラミングは面白い

プログラミングの事を中心に色々書いていきます

GoとVue忘れそう

最近、Laravelの勉強ばかりでGoとVueを忘れてしまいそうです。
せっかくある程度覚えたのに、勿体ない...

でもプログラミングって目的を達成できれば言語なんて何でもいいんですよね。
お客さんからすればモダンとかレガシーとか興味ないですし。
きちんとセキュリティが担保された上で、要件通りのシステムが出来てれば何でもいいわけで。

しかしFWは本当に便利です。
認証機能がコマンドちょろっと打ち込むだけで出来てしまう...
便利だけどやっぱりブラックボックス多すぎて怖さもあります。

まぁ独学でいくら勉強しても、結局実務では通用しないんですけど。
もちろん基礎を知ってるか知らないかでは雲泥の差がありますけど。

右も左も分からないGoとVueの現場で、必死に着いていったあの頃が懐かしい...
なのでGoとVueは思い入れがあります。

たまにはAtCoderの問題をGoで解いてみようそうしよう。

ブックマークってなんだ

はてなブックマークってなんぞ...?
なんかそちらにコメントをして頂いた方がいらっしゃったのですが、返答の仕方がよく分からず...

コメントありがとうございました。
参考にさせて頂きます。

謎機能多し。
てか、シンプルにブログだけで良いんだけどな...

おすすめフォント 白源

今までRictyを使用していたのですが、このフォントちょっと色々面倒だったりします。
バッククオートを使用すると文字が潰れてしまい、それを直すのが手間です。
しかし、このフォントは全角スペースが視覚的に分かるので大変便利です。

これに代わるフォントないかな、と探していたところ、ドンピシャなフォント発見!

その名も[白源]!
全角スペースも視認できるし、バッククオートも問題なく使用できます。
特にプログラミング初学者の方はうっかり全角スペースを入力してエラーを吐いた、なんてことも結構あると思うので導入をおススメします!
qiita.com

どうやらHSP

えー、わたくしどうやらHSP持ちのようです。
最近、このHSPというのを知ったのですが、こいつの概要はググったら色々出てくるので興味がある方は調べてみてください。
すっごいざっくり言うと、めっちゃ繊細な人の事を指すようです。
精神疾患とかではなく、生まれ持った気質らしいです。

なんか昔からやたら周りが気になる性格ではありました。
人ゴミに行くと信じられないくらい疲れるし、飲み会とかも途中で帰って一人になりたい、とか普通です。
一人の時間めっちゃ大事。

そしてとにかく考え込む。
悩んで悩んで悩みぬかないと次に進めません。
非繊細さんからすると、何でそんな悩むのか分からないようなのですが、何で悩まないのか逆に分かりません。

人の考えが分かるといいますか、もちろん毎回当たるわけではないのですが、何となく何考えてるのか分かってしまいます。
子供の頃から友達とケンカした後とか、どのタイミングで謝ったら良いか、みたいなのがすっごい良くわかります。
今謝ってもダメだな、とか、なんかそうゆう空気みたいなのが分かるんです。

で、むかしこの話を友達にした事があったのですが、"そんなのわかんねーし、そもそもそんなの考える?"みたいな返答でした。
あれ?これって皆そうじゃないの?ってその時は思ったのですが、もしかしたらこれもHSP特有の何かなのかもしれません。

どうしても人に気を使ってしまうので、目上の方とメシを食いに行くと自分が全然食べられないです。
特に焼肉がめんどくさい。
お肉って人それぞれ好きな焼き加減があるじゃないですか?
そこで色々考えます。

ここで適当に焼いて皆の皿に取り分けていった方がいいかな?
いやでも、自分で食いたいタイミングとかあるだろうし皿の上にお肉いっぱいになると嫌かな?
肉焼きのプロじゃないし、好みの焼き加減まで聞いて焼くのは無理だ...
かと言って何もしないと気を使えねーやつだなって思われそうだしな...
どうしようかな...

みたいな事を皆の話を聞きながら考えているので、あまり会話は頭に入ってきません。
で、結局は適当に焼いて皿の上に乗っけていきます。
皆の食べるペース見ながら肉焼いて、話を聞いて、酒頼んで、みたいな事してるので自分の分が食えない。

仕事でも人に何かを頼んだりするのが苦手です。
頼るのが苦手。
異常に迷惑を掛けたくない気持ちが強いので、相手の作業を止めて質問したり、何かをお願いするのが億劫です。
色々考えてしまうので。
なのでPGとして初めて現場に入った時には質問がうまく出来なくて先輩によく怒られました。
今でも質問は苦手。

何でこんな性格なのかなぁ...
と何度も思ったのですが、HSPの特性を知った事で最近心が軽いです。
自分だけじゃなくて、他にも同じように生きづらさを感じてる人がいるなんて...
しかも5人に1一人の割合なので結構いるという。

これは病気でもないし、治る治らないの話ではないので、今後はもう少し生きやすい方法を模索していこうと思っています。
HSP関連の本を読みながら、あるある!って共感してるのが楽しい今日この頃w

1つ謎が解けた

昨日投稿した記事の2番の謎が解けました。

2. useを記載しなくても動くのは何故か

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 何故これで動くの...?このRouteクラスとgetメソッドはどこから呼ばれてるんだ...?
Route::get('/', function () {
    return view('welcome');
});

ファサードについて

まずこの謎を解くにはファサードと言う機能を知る必要がありました。
Laravelではこのファサードというのが良く出てくるようです。

Route::get
みたいなのがファサードです。

普通、クラスメソッドを呼び出すにはまずクラスのインスタンス化が必要ですよね。

$test = new TestA();
$test -> testmethod();

こんな感じですね。
これをファサードを使用して呼び出すと、こんな感じになります。

TestA::testmethod();

わざわざインスタンス化しないでメソッドを呼び出す事が出来るようです。
便利!
だけど、パッと見どのファイルに書かれてるクラスなのか分かりづらい気もしますね。

で、このファサードの仕組みなのですがまだキャッチアップし切れていません。
config/app.phpエイリアス設定されたクラスはuseを使用しなくてもファサードで呼び出せるようになるようです。
しかも自作も出来ちゃうらしい。
この辺は時間がある時にもう少し調べてみます。

ひとまず、なぜuseを使ってないのにクラスメソッドを呼び出せるか、
そして、どこを見ればそのクラスを呼び出してるのかが分かるようになったので前進ですね。

けど、明示的にuse文を使用した方が良いのか、useなしで記述した方がいいのか、どっちなんだろう?
謎が謎を呼ぶ...

フレームワークは便利だけどこうゆうブラックボックス多くて不安になります。
全部を知る事はたぶん無理だけど、まずは点をたくさん増やして、線にしていくのが良さそうです。

勉強したての頃は脳死で"こうゆうもの"って気にせず使っていたような気がします。
今は色んな事が気になって調べて、ある程度答えを出せるようになったのは成長の証でしょう。

参考URL

【Laravel】ファサードとは?何が便利か?どういう仕組みか? - Qiita
ファサード 6.x Laravel

Laravelで謎エラー

久しぶりにLaravelを触ってます。
謎現象が起きたのでメモ。
ちなみに問題は解決したのですが謎は解けてないので、ご存知の方からのコメントをお待ちしています。

環境

ubuntu 20.04(WSL)
PHP 7.4
Laravel 6.19.1
VSCode

現象

php artisan serveを叩くと下記エラーを吐く。
BadMethodCallException : Method Illuminate\Routing\Route::get does not exist.

原因

routes/web.phpで記述されている下記のuseがおかしい。
use Illuminate\Routing\Route;

解決方法

use Illuminate\Routing\Route;

use Illuminate\Support\Facades\Route;
に書き換える

不明な事

Laravelのプロジェクトを作成した際に、上記のuse文は予め記載されていた。
ただ、プロジェクトを作成してすぐサーバーを立ち上げて、127.0.0.1:8000にアクセスした際にはちゃんと初期ページが表示されていた。
これは推測だけど、新しいコントローラーを作成した後にサーバーを立ち上げようと思ったらこの現象が起きた。

また、このuse文がなくても何故か正常に動く。
この挙動がほんと謎。
一体どこから呼ばれてるんだ...
なんか怖い。

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 何故これで動くの...?このRouteクラスとgetメソッドはどこから呼ばれてるんだ...?
Route::get('/', function () {
    return view('welcome');
});

まとめると...
1. なぜデフォルトで間違ったuse文が記述されていたのか
2. useを記載しなくても動くのは何故か

この2点が本当に謎。
ただ、2に関してはもしかしたらオートローディングってのが関係してるかもしれない。
まだあんま調べてないけど。
これじゃなかったらもうホントわけからん

久しぶりのPHPな上に、フレームワーク分からなくて色々困惑している。
出鼻をくじかれるのはお約束。
まぁ勉強しながらまったりやって行こう。

参考URL

php - Call to undefined method Illuminate\Routing\Route::get() - Stack Overflow
composerについて初期学習まとめ - Qiita

毎日大変

全然ブログ更新してないな...
飽きちゃうんだよなぁ...

てことで、軽く近況。
おじさんは毎日頑張ってPGとして日々成長しているはずです。
しかし、やった事のない機能の実装だと、工数を算出できないので大変です。
使ったことないライブラリが絡むと、工数はさらに伸びます。

この辺は経験あるのみですね。

そういえば、私はたまにloto7を買います。
なんかランダムだと嫌だけど、自分で考えるのも面倒だったのでプログラムを作ってみました。
まぁこれもランダムではあるのですが、自分で作ったしなんとなくセーフですw

ササっと作ったやつなので動作おかしいかもしれないけどw
ループの回数やrandの数値を変えればloto6とかでも使えます。
いつかこのプログラムで大金を当ててみせましょう。

package main

import (
    "time"
    "math/rand"
    "fmt"
    "sort"
    )
    
func main(){
    var nums []int

    for len(nums) < 7 {
        chekFlg := true
        rand.Seed(time.Now().UnixNano())
        num := rand.Intn(38)
        
        if len(nums) > 0 && num != 0 {
            for _, v := range nums {
                if v == num {
                    chekFlg = false
                    break
                }
            }
            if chekFlg {
                nums = append(nums, num)
            }
        } else if num == 0 {
            continue
        } else {
            nums = append(nums, num)
        }
    }
    
    sort.Sort(sort.IntSlice(nums))
    fmt.Println(nums)
}